前言
本文利用python的scrapy框架对虎牙web端的主播、主播订阅数、主播当前观看人数等基本数据进行抓取,并将抓取到的数据以csv格数输出,以及存储到mongodb中
思路
观察虎牙网站后确认所有频道url都在www.huya.com/g中的,而主播房间数据则是ajax异步数据,获取数据的链接为
http://www.huya.com/cache.php?m=LiveList&do=getLiveListByPage&gameId={频道id}&tagAll=0&page={页码}
该链接通过控制gameId和page来返回某频道下某页的数据,根据以上观察爬行设计思路如下
第一步:访问www.huya.com/g页面,在li(class类型为game-list-item)中获取当前所有频道的链接、标题、频道id
第二步:根据第一步获取到的频道的链接进入频道页面,在频道页面获取当前频道页数,再根据该频道id,页数构造异步数据请求链接
第三步:从第二步中获取频道返回的异步数据内容,将返回的json数据类型转化为字典,再获取要抓取的目标内容。
第四步:向第三步中获取到的主播房间url发出请求,进入房间页面后抓取主播订阅数
第五步:将数据输出为csv格式以及存在mongodb数据库中。
频道分类页面
ajax异步请求对应的链接
代码
items
在items中定义要抓取的字段内容,items代码如下
class HuyaspiderItem(scrapy.Item):
channel = scrapy.Field() #主播所在频道
anchor_category = scrapy.Field() #主播类型
anchor_name = scrapy.Field() #主播名称
anchor_url = scrapy.Field() #直播房间链接
anchor_tag = scrapy.Field() #主播标签
anchor_roomname = scrapy.Fiel