写在前面:
这是一篇关于b站的爬虫。
仅代表个人练习之作。欢迎大家讨论。
练习是个过程,提升个人能力是目的。
最近接触了爬虫之后,一时手痒,打算迈开第一步,至于为什么要爬b站,原因就不解释了。
1. 准备工作
开发环境个人选择Anaconda,原因是库真的好安装。
本文里面用到的库非常简单,就两个。自己装一下就行。
(顺便吐槽下pycharm,真的难。。。也可能是我不习惯。)
from bs4 import BeautifulSoup
from urllib import request
找到bilibili的网站:https://www.bilibili.com/ranking?spm_id_from=333.334.banner_link.1
打开是这个样子的
按F12看看
很快就能找到我们需要的东西,大概层级(为何MD这块不显示?)
graph LR
body-->div.app
div.app-->div.b-page-body
div.b-page-body-->div.main-inner
div.main-inner-->div.rank-container
div.rank-container-->div.rank-body
div.rank-body-->div.rank-list-wrap
div.rank-list-wrap-->ul.rank-list
我想取这里面的东西:
初步的想法是输出:
排名是:Num
URL地址是:XXXX
视频名字是:XXXX
播放量:XXX
收藏数:XXX
作者:XXX
开工。
代码工作:
这里我用的是BeautifulSoup这个包,别问,问就是其他不会。
headers = {
'X-Requested-With': 'XMLHttpRequest',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36'
'(KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'
}
url='https://www.bilibili.com/ranking?spm_id_from=333.334.banner_link.1'
req = request.Request(url, headers = headers)
X-Requested-With
加上'X-Requested-With':'XMLHttpRequest'
返回数据是json
不加,返回数据是普通html文本
可以用来判断客户端的请求是Ajax请求还是其他请求。。
User-Agent
User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
常见 User-Agent 大全
关于取标签这里,我用的是beautifulsoup的selector。
这块有CSS选择器,过滤器find_all(),find(),等等,我也在学习中,同时后续附上的代码大家可以看到,我做了很多尝试,可能是因为个人能力问题,效果都不太好。如果诸位有更好的,也希望能与我分享。
PS:作为一个程序员,记得写注释。。。。
很简短,结果跑出来了
但是有一个问题:
就是关于img这块,我不知道b站是做了什么处理吗?我爬不到这个字符串。
图片的src=//i2.hdslb.com/bfs/archive/9b39ce7334535062122f0f9c9236f48e88c79ff4.jpg@114w_70h.webp
这段复制到浏览器里面是可以直接看的。
希望后续我能解决。
代码git地址:
Code
因为本人能力有限,难免有理解不足的地方,也欢迎大家留言讨论,或者直接找我沟通。