Scrapy:b站爬虫之抓包过程
Scrapy:b站爬虫之抓包过程
一、内容说明
一共爬取八个数据,可分为四项:
1、标题(直接xpath,不用抓包)
2、点赞、投币、收藏
3、在线观看人数
4、弹幕内容、时间、发送时间
二、抓包过程
1、点赞,投币,收藏
1、获取信息源:
用xpath试过之后,发现无法获取,推测是api内容
2、尝试获取api接口:
F12,netwoek下ctrl+f搜索转发的数量(上热门的一般就转发量比较少)
3、进一步验证:
打开该api接口网址
获得数据:{“code”:0,“message”:“0”,“ttl”:1,“data”:{“aid”:89348202,“bvid”:"",“view”:1404996,“danmaku”:9684,“reply”:10236,“favorite”:39972,“coin”:166225,“share”:4815,“like”:240516,“now_rank”:0,“his_rank”:0,“no_reprint”:1,“copyright”:1,“argue_msg”:"",“evaluation”:""}}
确定了获取点赞,收藏,投币的api接口为’https://api.bilibili.com/x/web-interface/archive/stat?aid=’ + av号
4、应用到爬虫中:
av号就在该视频网址中,直接用提取数字就好,至于要爬取 的数据,格式都是一样的,获取网址response后提取数字获取对应的就可以了。
2、在线观看人数
1、获取信息源:
同样,xpath无法获取,但是api也无法获取,同时发现该数据在不断变换,推测为websocket包
2、尝试获取websocket数据:
F12,network下ctrl+f搜索websocket,找到后获取其传送的数据
由此可确定在线观看人数为该ws包
PS:浏览器无法直接获取转化信息的,可以复制原二(十六)进制数据去在线转换网站转换
3、应用到爬虫中:
(1)首先安装websocket对应的python第三方库——websocket-client
(2)获取对应视频的ws_url:直接在header里找
(3)由图可知,获得我们需要的信息之前,我们上传了两个数据,获取了一个数据。所以在爬虫中也要模拟这个过程,进行两次信息上传和两次信息接接收
(4)更改关键上传信息以获取对应视频的数据:
尝试了几个视频之后,发现不一样的地方只有第一次上传数据中的…
…{“room_id”:“video://89348202/152608931”,“platform”:“web”,“accepts”:[1000]}
前一个是av号,前面已经获取过了,后面的是cid
(5)获取cid,直接F12,ctrl+F,发现网站源码中有两处,一个是css中,一个是text格式,使用xpath获取text部分然后用正则表达式获取就ok
(6)使用re.sub更换关键数据,获取所需的ws包,再用正则提取所需内容
3、弹幕内容、时间、发送时间
1、获取信息源
百度一分钟,自己找几小时都不一定
百度一共有两个版本,一个是comment开头的,是老版本,和你打开的视频页面无关。找的话只能找到下面那个,至于咋找,一个个翻。
2、尝试获取api接口:
改av号就行
3、应用到爬虫中:
就这么个界面,直接response.text,然后正则表达式加循环提取就行,如果只需要内容的话xpath也行