虎牙直播间信息的抓取

分析站点

虎牙直播间信息的抓取_第1张图片
虎牙直播间信息的抓取_第2张图片
通过抓包分析可以发现第二页每个直播间的具体信息都藏在了
https://www.huya.com/cache.php?m=LiveList&do=getLiveListByPage&tagAll=0&page=2
这个url的响应当中

返回的是json数据,每一页一共是120个直播间信息
每一个直播间信息都在json数据里面的data里面的datas
这是一个列表,长度是120
如下图
在这里插入图片描述

此url最后面的page=2表示第二页,以此类推,第一页就是page=1,第三页就是page=3…

规律已经摸清楚了,接下来就可以写代码了

import requests
import json


class Spider:
    def __init__(self):
        # 在这里不指定具体抓取哪一页,page=???,指定具体页数在后面
        self.url = 'https://www.huya.com/cache.php?m=LiveList&do=getLiveListByPage&tagAll=0&page={}'

    def parse(self, url):
        response = requests.get(url)
        response.encoding = 'utf-8'
        assert response.status_code == 200  # 断言一下状态码是200
        json_dict = json.loads(response.text)  # 把响应的json数据转换成python的字典
        infos = json_dict['data']['datas']   # 每一页的直播间数据全在这里面,一共120个
        for info in infos:
            item = {}
            item['标题'] = info['introduction']
            item['类型'] = info['gameFullName']
            item['主播'] = info['nick']
            item['网址'] = 'https://www.huya.com/' + info['profileRoom']
            item['人气'] = info['totalCount']
            print(item)
            f.write(json.dumps(item, ensure_ascii=False))  # 为了防止乱码
            f.write('\n')
            f.write('\n')


if __name__ == '__main__':
    spider = Spider()
    with open('./huay.txt', 'a', encoding='utf-8') as f:  # 将保存到本地的huya.txt文件中
        for i in range(1, 11):  # 在这里我只构造了1-10页的数据
            spider.parse(spider.url.format(i))  

运行结果
虎牙直播间信息的抓取_第3张图片
本地文件
虎牙直播间信息的抓取_第4张图片

补充

虎牙直播间抓取 - 使用表格保存
虎牙直播间信息的抓取_第5张图片
一共是274页
虎牙直播间信息的抓取_第6张图片
通过上图可以发现总页数可以在
https://www.huya.com/l
的网页源代码中得到

在这份代码里,连最基本的User-Agent我都没有用到,即使是这样也是可以抓取。

你可能感兴趣的:(网络爬虫)