通过对json数据解析爬取虎牙直播数据并存入csv文件

  • 学习了Python语言程序设计和Python网络爬虫与信息提取,需要找些网站来练练手,于是在网上找了些别人爬取的网站,最终选择了虎牙直播平台进行爬取,并为后续数据分析存储数据。
    首先打开虎牙直播平台,进入虎牙直播,通过点击下一页,我们发现虎牙直播平台网页网址并未发生变化,这是采用Ajax动态加载和翻页,详见爬取Ajax动态加载和翻页时url不变的网页+网站案例。点击鼠标右键-检查,查看“Network-XHR”,刷新后,点击下一页,发现在“Name”里多了些东西,通过点击查看发现了“cache.php?m=LiveList&do=getLiveListByPage&tagAll=0&page=2”这一项,点击后查看“Headers”,General中Request的 URL,应该是我们要的网址,点击“Response”,发现其为json语言,复制后,通过网站在线解析,很清楚就看到了我们想要的东西,每个房间的信息历历在目。得到了这些东西,我们就可以对该网页进行数据爬取了。
  1. 构建网页地址-定义了get_url()函数,此处采用了yield关键字,每次产生一个网址,读取完数据后,再生成第二个网址;
  2. 获取网页json数据并转为Python,定义了get_html_text()函数,采用的是requests库请求数据,并采用json库loads方法将请求的数据转为Python;
  3. 获取各个主播房间的详细信息,定义了get_host_info()函数,json数据转换后的Python数据是字典格式,需要采用字典关键字来获得主播信息,此处也采用了yield关键字,来每次生成一个主播的房间名字,房间类型,主播名称及房间人数,最后采用元组返回;
  4. 最后是代码的主程序,将数据写入csv文件,由于用的Mac电脑,直接存入未经编码为中文的数据后,用excel打开csv文件,显示的一堆乱码,此处需要在open打开文件时,指定编码格式为“gbk”中文,再将文件写入,保存后的文件用excel打开才会显示中文。如果需要对生成的csv文件进行数据分析,同样需要对其编码格式进行指定为“gbk”,读取后的数据才会显示成中文。
    介绍了这么多,直接上代码吧:
import requests
import json

"""获取虎牙JSON网页地址"""
def get_url():
    base_url = 'https://www.huya.com/cache.php?m=LiveList&do=getLiveListByPage&tagAll=0&page='
    num = eval(input("请输入爬取网页数量:"))
    for i in range(num):
        url = base_url + str(i+1)
        yield url

"""获取JSON数据,并转为Python数据"""
def get_html_text(url):
    try:
        r = requests.get(url)
        r.raise_for_status()
        js_data = json.loads(r.text)
        return js_data
    except:
        return ""

"""提取主播房间名,房间类型,主播名及房间人数"""
def get_host_info(data):
    host_info = data['data']['datas']
    for info in host_info:
        room_name = info['introduction']
        room_type = info['gameFullName']
        room_host = info['nick']
        room_persons = info['totalCount']
        yield room_name, room_type, room_host, room_persons



"""写入文件"""
if __name__ == "__main__":
    with open('huya.csv', 'a+', encoding='gbk') as f:
        for url in get_url():
            js_data = get_html_text(url)
            for host_info in get_host_info(js_data):
                try:
                    f.write(','.join(host_info)+'\n')
                except UnicodeEncodeError:
                    continue
    f.close()
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值