查看原文
其他

BeautifulSoup的常用方法

东仔 Python绿洲 2018-08-21

阅读文本需要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" 的所有元素
elep选择所有 p 元素。
ele,elediv,p选择所有div

元素和所有p元素。

ele1~ele2p~ul选择前面有p元素的每个ul 元素。

例如:

1#嵌套选择
2provice_link = soup.select('.area_box > a')
3    for link in provice_link:
4        if 'class' not in link.attrs:   #是否包含class属性
5            href = link['href']         #通过[]获取属性值
6            provice = link.select('span')[0].text   #获取单个元素的文本值

上面展示了如何使用嵌套和获取属性值


最后


壮士,干了这碗靓汤,然后动手去爬点东西下来吧。毕竟,“实践是检验真理的唯一标准”,只有在实践中才能发现错误,并且收获到成就感。可以拿豆瓣、猫眼、安居客这些大型网站来练手


后台回复 豆瓣250 ,可以查看爬取豆瓣电影的源码哦!!!

推荐阅读:

python数据可视化-00后高考大军

如何优雅的用python库提升逼格???


点赞是一种态度



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存