BeautifulSoup的常用方法
阅读文本需要3.5分钟
相信绝大部分的学习爬虫的朋友都会使用到beautifulsoup这个强大的库,它依靠网页的结构和属性等特点来解析网页。如果对前端的知识有一点了解的话,那对于这个靓汤 (后面就用这个自定义昵称了) 的使用就会如虎添翼了。
当然如果不了解的话,也没有关系,毕竟爬虫只是用到前端的一点内容而已,相信你们可以秒懂!!!O(∩_∩)O哈哈~
安装
1. beautifulsoup4
pip install beautifulsoup4
2. lxml
强烈建议安装一下lxml
解析器,它的解析速度快、文档容错能力强,比内置的解析速度快得多了去了。它的安装建议直接下载对应的.whl文件进行安装,使用pip
安装的话,可能会出错,反正我是出错了。
基本使用
1. 获取对象
靓汤通过传入文档来获取文档对象。文档可以通过requests
来获取,获取对象之后就可以为所欲为了
举个栗子:
1from bs4 import BeautifulSoup
2import requests
3web_data = requests.get(‘http://www.baidu.com/’).content
4soup = BeautifulSoup(web_data, 'lxml')
上面的最后一行代码传入了html
文档和解析器,这样就可以得到一碗靓汤对象了。
ps:为了避免中文的乱码,建议使用content
而不使用text
2. 方法选择器
方法选择器中我经常使用下面的两种。能不能满足你就看你的爬取欲望了
1. find_all(name , attrs , recursive , text , **kwargs)
顾名思义,就是查询所有符合条件的元素,可以给它传入一些属性或文本来得到符合条件的元素,功能十分强大。
参数名 | 解释 |
---|---|
name | 传入标签名 |
attrs | 以字典的形式传入属性 |
text | 用来匹配节点的文本,可以是正则 |
例如:
1import re
2soup.find_all(
3 'tr',
4 attrs={
5 'id':'value',
6 'class': re.compile('^c_\S*')
7 },
8 text='link'
9)
上面的代码就是查找<tr>
标签中id
为value,class
符合正则表达式,text
为link的节点
find_all的参数是可选的,实际使用时不要受上面的影响,上面只是演示而已
2. find(name ,attrs ,recursive , text , **kwargs)
find_all()
的双胞胎兄弟,find()
方法返回的是单个元素,也就是第一个匹配的元素,而find_all()
返回的是所有匹配的元素组成的列表。
它的参数一样,就不啰嗦了
3. CSS选择器
BeautifulSoup除了方法选择器,还提供了另外一种选择器,那就是CSS选择器。这也就是和前端有点关系的了。
使用CSS选择器,只需要调用select()方法,传入相应的CSS选择器即可。
选择器 | 例子 | 例子描述 |
---|---|---|
.class | .intro | 选择 class="intro" 的所有元素。 |
#id | #first | 选择 id="first" 的所有元素 |
ele | p | 选择所有 p 元素。 |
ele,ele | div,p | 选择所有div 元素和所有p元素。 |
ele1~ele2 | p~ul | 选择前面有p元素的每个ul 元素。 |
例如:
1
2provice_link = soup.select('.area_box > a')
3 for link in provice_link:
4 if 'class' not in link.attrs:
5 href = link['href']
6 provice = link.select('span')[0].text
上面展示了如何使用嵌套和获取属性值
最后
壮士,干了这碗靓汤,然后动手去爬点东西下来吧。毕竟,“实践是检验真理的唯一标准”,只有在实践中才能发现错误,并且收获到成就感。可以拿豆瓣、猫眼、安居客这些大型网站来练手
后台回复 豆瓣250 ,可以查看爬取豆瓣电影的源码哦!!!
推荐阅读:
python数据可视化-00后高考大军
如何优雅的用python库提升逼格???
点赞是一种态度