鱼C论坛

 找回密码
 立即注册
楼主: 小甲鱼

[爬虫] 找出B站最受欢迎的编程课程

  [复制链接]
发表于 2020-9-9 18:02:36 | 显示全部楼层
朕想知道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-9 21:32:27 | 显示全部楼层
吱吱吱吱
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-16 18:30:17 | 显示全部楼层
为什么照着抄,在IDLE的交互页面看不到结果。。。。
res.text是有输出,但是过滤后的却是一直不现实。就是是包装到文件中
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-16 18:51:36 | 显示全部楼层
你好,小甲鱼,我根据这个来写,为什么不管在交互页面还是pycha,都没办法把数据读出来。
另外,直接copy你的全部完整的代码,弄出来的表格都是空的?为啥?


import requests
import bs4

res = requests.get("https://search.bilibili.com/all?keyword=编程&order=totalrank&duration=0&tids_1=0")
print(res.text)
soup = bs4.BeautifulSoup(res.text,"html.parser")
titles = soup.find_all("li",class_="video matrix")
for each in titles:
    print(each.a["title"])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-9-16 18:57:55 | 显示全部楼层
原来是因为B站的class的标签名字改了。。。。。
改成下面就可以了。
诶,死读书的人。。。。。
titles = soup.find_all("li",class_="video-item matrix")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-9-18 15:05:31 | 显示全部楼层
好多不懂:
请大神指教
1:
tags = video.select("div[class='tags'] > span")  这个是什么意思?select是一种什么方法?
        for tag in tags:
            datas.append(''.join(tag.text.split()))    这个更不懂?空格后的.点的方法是join?内部还有带切片?
2:
"s -> (s0,s1,s2,...sn-1), (sn,sn+1,sn+2,...s2n-1), (s2n,s2n+1,s2n+2,...s3n-1), ..."
    return zip(*[iter(iterable)]*n)   这个直接懵逼,怎么去理解这个?

3:这个更不懂
for page in range(1, pages+1):
            url = "https://search.bilibili.com/all?keyword={}&order={}&duration=4&tids_1=36&page={}".format(keyword, order[i], page)
            text = get_html(url)
            datas = get_datas(text)
            # 为每种排序创建一个文本文件单独存放
            with open(order_name[i]+'.txt', 'a', encoding="utf-8") as file:
                for video_title, video_URL, video_watch, video_dm, video_time, video_up in grouped(datas, 6):
                    file.write(' + '.join([str(index), video_title, video_URL, video_watch, video_dm, video_time, video_up, '\n']))
                    index += 1
            # 做一只善意的爬虫,不要给服务器带来负担
            time.sleep(1)
   求指导啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-19 10:31:11 | 显示全部楼层
崴,幺幺玲嘛,有人再装b,场面快控制不住了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-20 18:26:24 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-24 14:25:37 | 显示全部楼层
1111
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-27 17:44:55 | 显示全部楼层
get_tags
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-23 17:14:47 | 显示全部楼层
知道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-23 17:24:25 | 显示全部楼层
opengjie 发表于 2020-9-18 15:05
好多不懂:
请大神指教
1:

啊。老哥懂了吗,你第一个问题,Select是那个Bs4模块里面用来解析网页的方法,就是解析网页,得到想要的内容,你可以去看看小龟龟的文章,你去过一遍,就知道大致了,熟练还得多去动手,

第二个问题,第一个是join拼接字符串,然后里面的内容再试空白字符作为分隔符对字符串进行分割

第三个问题,啊,我也不太懂,不过好像Zip()是用来返回各个可迭代参数共同组成的元祖

第四个问题。你不单独存放那岂不是文件的内容挤在一个文件了,
它就是创建4个文件,把每个对应的文件的内容放到里面,
至于代码嘛,只能自己多敲多看才能懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-23 17:26:14 | 显示全部楼层
为什么看着小龟龟的代码都好复杂啊,这是我的,,,,,
import bs4
import requests
import json

def get_url(url):
    res = requests.get(url)
    res = requests.get(url).text
    
    soup = bs4.BeautifulSoup(res,"html.parser")
    
    titles = soup.find_all("li",class_="video-item matrix")
    b = ""
    for i in titles:
        b += "视频名字:" + i.a["title"] + "---->" # 视频名字
        #print(i.a["title"])
        
        b += "视频地址:"+ i.a["href"][2:] + "---->" # 视频连接
        #print(i.a["href"][2:])

        b += "时长:" + i.find_all("span")[0].text.strip() + "---->" # 视频时长
        #print(i.find_all("span")[0].text.strip()) 

        b += "标签:" + i.find_all("span")[2].text.strip() + "---->"
        #print(i.find_all("span")[2].text.strip())

        b += "播放数量:" + i.find_all("span")[3].text.strip() + "---->"
        #print(i.find_all("span")[3].text.strip())

        b += "弹幕数量:" + i.find_all("span")[4].text.strip() + "---->"
        #print(i.find_all("span")[4].text.strip())

        b += "上传时间:" + i.find_all("span")[5].text.strip() + "---->"
        #print(i.find_all("span")[5].text.strip())

        b += "up主名字:" + i.find_all("span")[6].text.strip() + "\n\n\n"
        #print(i.find_all("span")[6].text.strip())


    return b
    


def main():
    key = input("请输入要搜索的关键词:")
    yeshu = int(input("请输入要搜索多少页(请输入整数):"))
    conut = 0
    name_1 = ["最多点击","最新发布","最多弹幕","最多收藏"]
    name = ["&order=click&duration=4&tids_1=0","&order=pubdate&duration=4&tids_1=0","&order=dm&duration=4&tids_1=0","&order=stow&duration=4&tids_1=0"]
    # 注意for 循环用来迭代的对象名不要重复名了
    for i in range(1,yeshu+1):  # 因为range从0开始的话会网页错误,所有开头为1
        print("正在爬取中............当前第%d页"%i)
        for j in name_1:
            
            url = "https://search.bilibili.com/all?keyword=%s%s&page=%s"%(key,name[conut],i) 
            b = get_url(url)
            with open("%s.txt"%j,"a",encoding = "utf-8") as f:
                for each in b:
                    f.write(each)
            conut +=1
        
        conut = 0 # 变量返回为0,用来查列表下标
    print("程序结束")
        
if __name__ == "__main__":
    main()
# i.find_all("span")[0~6].text.strip()
# 根据要求查找1234567个下标的内容
""" 下标0 = 时长
    下标1 = 无
    下标2 = 搜索标签?
    下标3 = 观看数量
    下标4 = 弹幕数量
    下标5 = 上传时间
    下标6 = up主名字
"""
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-10-31 17:32:26 | 显示全部楼层
朕想知道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-6 11:30:53 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-8 09:19:39 | 显示全部楼层
11223344
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-11 10:57:15 | 显示全部楼层
dd
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-17 21:50:35 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-2 23:14:15 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-3 20:17:17 | 显示全部楼层
朕想知道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-21 20:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表