版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/g_optimistic/article/details/89944897
目录
斗鱼直播:https://www.douyu.com/directory/all
进入这个网址之后我们想要爬取在线直播的所有直播房间
1.导入模块
import requests
from lxml import etree
2.网络请求
url = 'https://www.douyu.com/directory/all'
# 模仿浏览器访问
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36'
}
content = requests.get(url=url, headers=headers).content.decode('utf-8')
with open('templates\\douyu.html', 'w', encoding='utf-8') as fp:
fp.write(content)
3.提取数据
首先分析一下前端页面的结构,看看我们要的数据在哪
有一个注意的问题,我们在浏览器上看到的结构可能和我们保存下来的content有所不同,所以在浏览器找到我们要的东西之后,去保存的content里面再去确认一下。
每一房间的位置:ul>li
(1)房间名称
(2)房间标签
(3)主播
(4)关注数
代码实现:
tree = etree.HTML(content)
li_list = tree.xpath('//ul[@class="layout-Cover-list"]/li')
print(len(li_list))
i = 0
for li in li_list:
i += 1
print('===================第%s个房间======================' % i)
# 提取房间名称
room_name = li.xpath('.//h3[@class="DyListCover-intro"]/text()')
print("房间名称", room_name[0])
room_tag = li.xpath('.//span[@class="DyListCover-zone"]/text()')
print("房间标签:", room_tag[0])
room_player = li.xpath('.//h2[@class="DyListCover-user is-template"]/text()')
print("主播:", room_player[0])
room_follows = li.xpath('.//span[@class="DyListCover-hot is-template"]/text()')
print("关注数:", room_follows[0])
# 使用requests请求,不能实现分页,选择无界面请求
后面我们再讲分页策略