鱼C论坛

 找回密码
 立即注册
查看: 3416|回复: 8

[作品展示] 对【爬虫篇】《极客Python之效率革命》 找出b站最受欢迎视频的一些改动

[复制链接]
发表于 2020-3-3 09:51:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
对小甲鱼大佬发布的 找出b站最受欢迎的编程课程 的爬虫代码的改进。b站网页源代码有所变化,title的class从class_="video matrix"变成了class_="video-item matrix"。
把对编程区的搜索改成了综合搜索
另改进了生成的txt文本的排版。
  1. import requests
  2. import bs4
  3. import time

  4. def get_input():
  5.     keyword = input("请输入关键词:")
  6.     pages = int(input("请输入要爬取得页数(1~50):"))

  7.     while pages not in range(1, 51):
  8.         pages = int(input("请输入正确的页数:"))

  9.     return keyword, pages


  10. def get_html(url):
  11.     headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36'}
  12.     res = requests.get(url, headers=headers)

  13.     return res.text



  14. def get_datas(text):
  15.     soup = bs4.BeautifulSoup(text, "html.parser")
  16.    
  17.     datas = []  
  18.     videos = soup.find_all("li", class_="video-item matrix")
  19.     for video in videos:
  20.         # 获取标题
  21.         datas.append(video.a['title'])
  22.         # 获取URL
  23.         datas.append('https:'+video.a['href'])       #多出//
  24.         # 获取观看数/弹幕数/上传时间/阿婆主
  25.         tags = video.select("div[class='tags'] > span")
  26.         for tag in tags:
  27.             datas.append(''.join(tag.text.split()))

  28.     return datas

  29.    


  30. def grouped(iterable, n):
  31.     "将列表切成n片一组"
  32.     "s -> (s0,s1,s2,...sn-1), (sn,sn+1,sn+2,...s2n-1), (s2n,s2n+1,s2n+2,...s3n-1), ..."
  33.     return zip(*[iter(iterable)]*n)


  34. def main():
  35.     keyword, pages = get_input()
  36.     order = ['totalrank', 'click', 'dm', 'stow']
  37.     order_name = ['综合排序', '最多点击', '最多弹幕', '最多收藏']
  38.    
  39.     # 迭代每种排序
  40.     for i in range(4):
  41.         index = 1
  42.         # 迭代每一页
  43.         for page in range(1, pages+1):
  44.             url = "https://search.bilibili.com/all?keyword={}&order={}&duration=4&tids_1=0&page={}".format(keyword, order[i], page)
  45.             text = get_html(url)
  46.             datas = get_datas(text)
  47.             # 为每种排序创建一个文本文件单独存放
  48.             with open(keyword+"     "+order_name[i]+'.txt', 'a', encoding="utf-8") as file:
  49.                 for video_title, video_URL, video_watch, video_dm, video_time, video_up in grouped(datas, 6):
  50.                     file.write('       '.join([str(index),'\n'+'名称:', video_title,'\n'+'地址:', video_URL,'\n'+'播放量:', video_watch,'\n'+'弹幕数:', video_dm,'\n'+'发布时间:', video_time,'\n'+'up主:', video_up, '\n']))
  51.                     index += 1
  52.             # 做一只善意的爬虫,不要给服务器带来负担
  53.             time.sleep(1)
  54.    
  55. if __name__ == "__main__":
  56.     main()
复制代码
不过这段代码在我的电脑上,第一次打开时无法运行的,需要二次打开才能正常工作。很魔性。。。。

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
qiuyouzhi + 5 + 5 鼓励一下~~

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-14 22:25:21 | 显示全部楼层
andy_william 发表于 2020-4-14 19:34
Traceback (most recent call last):
  File "D:\python\搜索B站编程课程.py", line 1, in
    import r ...

没有安装requests模块
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-9 18:25:08 | 显示全部楼层
第34行是什么意思 ,小白求教
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-9 09:09:00 | 显示全部楼层
andy_william 发表于 2020-4-14 19:34
Traceback (most recent call last):
  File "D:\python\搜索B站编程课程.py", line 1, in
    import r ...

什么情况   大佬我也是这问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-9 09:08:24 | 显示全部楼层
============= RESTART: D:/A桌面/Users/XY/Desktop/python练习代码/爬取编程课.py =============
Traceback (most recent call last):
  File "D:/A桌面/Users/XY/Desktop/python练习代码/爬取编程课.py", line 1, in <module>
    import requests
ModuleNotFoundError: No module named 'requests'
>>>

不知道什么情况  谢谢各位大佬
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-20 17:49:08 | 显示全部楼层
第一次 不行是  什么bug?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-14 19:34:04 | 显示全部楼层
Traceback (most recent call last):
  File "D:\python\搜索B站编程课程.py", line 1, in <module>
    import requests
ModuleNotFoundError: No module named 'requests'

大佬,这个是什么情况啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-7 06:17:32 | 显示全部楼层
牛批
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-6 07:51:20 | 显示全部楼层
谢谢大佬
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-23 14:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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