爬虫小记(3)

     今天做的一个是爬取斗鱼的排行榜。

    因为一开始看F12的时候我没能找到如何获取所需要内容的办法,一开始我是想用BeautifulSoup库的Select方法的,但是使用这个方法查找标签的方法只能查到一个空集,我感到很奇怪,因为我使用的标签是一定存在的啊,就算找不到我真正想要的那部分内容也不应该是空集啊。后来我使用了re库的findall方法,但是找到之后并不能正常的以‘utf-8’的编码显示出来,然后我看别人写的内容是经过了一次json.loads()方法后就能正常的显示中文,返回的是一个字典,最后通过字典的键名就能找到想要的内容。所以唯一的收获就是如果最后想获得的可以是一个字典格式的变量的话,一开始如果不能得到能够显示中文内容的结果,那么一个好方法是使用json.loads()操作一下。

另一个收获吧,是记住了re.S他的任务是把‘.’的表示范围扩展到了‘\n’这样即使我们想要的字符串之间存在换行符,我们也一样能匹配到,如果不加的话默认这个。是只能在同一行里面匹配的。

import re
import requests
import json
url = 'https://www.douyu.com/directory/rank_list/game'
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/55.0'}
page = requests.get(url, headers=header)
page.encoding = page.apparent_encoding
print(page.apparent_encoding)
rs = page.text
mt = re.findall('rankListData\s+?=(.*?);', rs, re.S)
#print(mt)
#fp = open('1.txt', 'w', encoding='utf-8')
#for mtnum in mt:
    #fp.write(mtnum)
#result = json.dump(mt, fp)
#print(result)
#print(mt)

mtdict = json.loads(mt[0])
print(type(mt))
print(type(mtdict))
#print

#print(mtdict)
for listData in ['dayListData','weekListData','monthListData']:
    mtdictdict = mtdict['anchorListData'][listData]
    print("这是%s"%listData)
    for mtdictnum in mtdictdict:
            #print(mtdictnum)
        print('第%d名是%s,他的直播间id是%s,他的直播类别是%s,他%s'%(mtdictnum['id'],mtdictnum['nickname'],mtdictnum['room_id'],mtdictnum['catagory'],mtdictnum['title']))


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值