Scrapy抓取虎牙视频 —— 舞蹈
目标站:https://v.huya.com/
环境
Windows 11
Pycharm
Python 3.8.9
Scrapy 2.7.1

思路:
Scrapy的起始页为:https://v.huya.com/。
频道页为:https://v.huya.com/g/all
网页播放页为:https://v.huya.com/play/840864137.html,但是通过浏览器的开发者工具并没有发现Media的数据;
用网页开发者工具抓包发现播放请求的真是地址为:https://liveapi.huya.com/moment/getMomentContent?callback=jQuery1124031254075051677055_1678778517216&videoId=840864137&_=1678778517221
callback后的参数不影响数据,所以确定最终应该请求数据的网址为:https://liveapi.huya.com/moment/getMomentContent?videoId=840864137&_=1678778517221
上面网址出来的数据为类似Json格式的
将请求上方网页的数据转换成Json格式,拿到视频真实的地址
通过Scrapy请求真实的视频地址并下载

正文:
数据很多,不打算爬取整站,所以以舞蹈页面为例。打开终端,切换到项目预存放的位置,如D:\Python Projects:
新建项目:
新建爬虫:

第一步:
找到项目文件夹下的items.py,先来定义要爬取的字段。最终的目的是下载视频,只需要两个字段,一个是视频的名称,还有一个就是要请求下载的视频url。代码如下:

第二步:
找到项目文件夹下的spiders文件夹,选中刚刚创建的爬虫huya.py。开始爬取内容:

第三步:
pipelines.py

第四步:
写好之后,在项目文件夹下的settings.py中开启管道并定义下载存储的位置:
打开终端,运行:
下载的视频截图:

猛然发现才爬一页,继续切换到爬虫文件huya.py,在parse方法中定义一下翻页逻辑:
翻页的逻辑定义在next_page_urls那个地方,然后请求的时候给自己回调就行了。
如果要爬取整站,这个爬虫模板就显得吃力了。可以用Scrapy的crawl爬虫模板,制定出爬取规则,理论上就可以爬取整站了。
最后是翻页爬取结果,爬了两分半,下载了将近2G的视频。速度还是蛮快的。

申明:本文仅是作者的笔记,仅供学习交流使用。