Python爬虫初级(3):BeautifulSoup解析网页
Python爬虫初级(3):BeautifulSoup解析网页
·
1、概念
- BeautifulSoup最主要的功能解析从网页抓取的数据,即通过其解析后,可使用第一章所讲的Selector进行HTML标签查找。
- BeautifulSoup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,如果我们不安装它,则Python会使用默认的解析器。
- lxml 解析器更加强大,速度更快,推荐使用lxml 解析器。
2、安装
- 由于第二章已经介绍过具体安装步骤,这里只给出执行语句:
pip install beautifulsoup4
pip install lxml
- 其中lxml为HTML解析器,届时作为“参数”传入BeautifulSoup。
3、分析
-
以第二章的豆瓣Top250电影网站爬虫为例:
-
在第二章中,我们成功使用Requests库获取到了网站源代码信息,但并没有得到我们想要的具体的数据(如获取电影名称),要获取电影名称,就必须解析图中的web_data.text,因为此时web_data.text为字符串类型,我们无法对字符串进行查找。
-
BeautifulSoup进行查找需要用到标签的Selector路径,打开豆瓣Top250电影网站,以第一部电影《肖申克的救赎》为例,按F12打开检查面板,在面板最左上方有一个箭头指向正方形的图标,点击即可选择网页标签(也可在打开检查面板前,按Ctrl + Shift + C直接进入选择标签模式,同时自动打开检查面板)。鼠标移动到电影名称上,会出现此标签的信息。
-
点击此标签(电影名称),控制面板会出现此标签的源代码,可以看到电影名位于<span></span>标签内。鼠标点击选择此标签,右键 - Copy - Copy Selector,即可将此标签Selector路径复制下来。
-
获取到Selector路径后,即可使用BeautifulSoup的select()方法,传入Selector路径,从而获取此标签,再通过.text获取标签内(即<span>与</span>之间)的文本内容,即获取到我们想要的电影名。
4、代码
- 首先导入BeautifulSoup包。
from bs4 import BeautifulSoup
- 定义soup变量,保存BeautifulSoup解析后的值,并打印查看结果。
soup = BeautifulSoup(web_data.text, 'lxml')
print(soup)
- 此时可能并不能看出使用BeautifulSoup解析前后的不同,但其实soup已经不是解析前的字符串类型了,我们可以对其进行标签查找。
- 使用select()方法获取电影名并打印结果,其中select传入的参数为复制的Selector路径:
movie_name = soup.select('#content > div > div.article > ol > li:nth-child(1) > div > div.info > div.hd > a > span:nth-child(1)')
print(movie_name)
- 需注意,select()返回的是一个列表,因为有时候可能要查找多个标签,故在使用.text取出电影名之前,需要先从列表取出标签,即为上图中的[0],这时方可使用.text作用于解析后的标签。
- 当然,我们也可以获取此网页所有的电影名。对比第二部电影《霸王别姬》的Selector路径:
Xiao = '#content > div > div.article > ol > li:nth-child(1) > div > div.info > div.hd > a > span:nth-child(1)'
Wang = '#content > div > div.article > ol > li:nth-child(2) > div > div.info > div.hd > a > span:nth-child(1)'
- 可发现唯一的不同即为“ li:nth-child(n) ”,第一部电影n为1,第二部电影n为2,故若去掉“ :nth-child(n) ”,则可以获取所有的电影名(此处涉及到HTML知识):
movie_name = soup.select('#content > div > div.article > ol > li > div > div.info > div.hd > a > span:nth-child(1)')
print(movie_name)
- 结果即为包含所有电影名标签的列表。
- 完整代码如下:
import requests
from bs4 import BeautifulSoup
Headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36'
}
Url = 'https://movie.douban.com/top250'
web_data = requests.get(Url, headers=Headers)
soup = BeautifulSoup(web_data.text, 'lxml')
# print(soup)
movie_name = soup.select('#content > div > div.article > ol > li > div > div.info > div.hd > a > span:nth-child(1)')
print(movie_name)
# print(movie_name[0].text)
# print(web_data)
# print(web_data.text)
5、总结
- BeautifulSoup是爬虫网页解析最为常用的库之一,其操作简单,非常适合新手使用,但仍有一些细节需要注意,如.text方法作用的对象、select()返回的是一个列表等等。
- 学如逆水行舟,不进则退!
- (ง •̀-•́)ง
更多推荐
已为社区贡献2条内容
所有评论(0)