前言
爬虫是一段可以在网页上自动抓取信息的程序,可以帮助我们获取一些有用的信息。目前主流的 Python 爬虫框架主要分为调度器、URL 管理器、网页下载器、网页解析器和应用程序(爬取的有价值数据)。调度器负责调度管理器、下载器和解析器;URL 管理器用来管理 URL,防止重复抓取或循环抓取;网页下载器用于下载网页并转换成字符串;网页解析器用于解析下载下来的字符串,目前主要以 DOM 树来解析,也可以根据 XML、HTML 进行解析。
爬虫框架已经帮我们完成了大部分工作,我们只需要关注三个步骤:
- 如何能请求得到目标网站的数据;
- 如何从解析器中截取我们想要的数据;
- 得到数据后如何做分析。
下面以斗鱼网站上最火的直播主题,哪些主播的人气最高为目标,演示整个实现流程。
Python 环境搭建
爬虫框架还需要安装几个模块,requests 和 BeautifulSoup4,分别运行命令:
pip install requests
pip install beautifulsoup4
开发工具选用 PyCharm,运行完上面命令后,在 PyCharm 里安装上面两个组件模块,安装成功后,可以在开发工具里引入相关包。
#!/usr/bin/python
import requests
from bs4 import BeautifulSoup as bs
如果引入成功,则安装完成。环境搭建完后,就开始写代码了。
获取目标网站信息
我们先打开斗鱼直播的网站,https://www.douyu.com/directory/all,F12 可以看到网页的信息。
通过 requests 请求网站数据:
response = requests.get("https://www.douyu.com/directory/all")
print(response.text)
我们就得到了网页的字符串信息,这里就完成了第一步。
解析网页信息
下面介绍如何在大量的文本中筛选出需要的数据,BeautifulSoup 功能非常强大,通过 DOM 树的方式帮助我们解析出网页的结构,可以以 Python 自带的 html.parser 进行解析,也可以使用 lxml 进行解析。
html = response.text
html_tree = bs(html, "html.parser")
print(html_tree)
可以看到之前的字符串信息已经被格式化,得到很清晰的 HTML 文本。后面就可以很容易地获取 DOM 树中各个节点数据。我们可以观察到 HTML 文本中有用的数据都在 <ul> 标签的 <li> 中,房间名是 <h3> 标签的内容,房间类型在 <span> 标签下,房间人数在 <span> 中,主播名在 <p> 中。
在刚才解析出的 HTML 文本中,查找出 id="live-list-contentbox" 的 <ul> 标签,并且获取所有的 <li> 标签内容:
# 查询 ul 标签
host_infos = html_tree.find("ul", {"id": "live-list-contentbox"})
host_list = host_infos.find_all()
(host_list)
host host_list:
home_name = host.find(, {: }).string.strip()
home_name = home_name.replace(, )
p_str = host.find()
host_name = p_str.find(, {: }).string.strip()
home_type = host.find(, {: }).string
home_num = host.find(, {: }).string
()


