强大的BeautifulSoup库

algorain

BeautifulSoup简直就是神器,省去了复杂的正则表达式,而且还能自动将字符编码,下面是关于我在爬虫中使用BeautifulSoup库的总结,最常用,最好用的一些功能。下面会把我使用的示例HTML代码放出来。

为了格式整齐,都写在代码里了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
导入库: from bs4 import BeautifulSoup
实例化: soup = BeautifulSoup(text)

1. 最常用的功能:soup.title,表示查找到title标签,或者soup.div,注意此时输出的值是是整个标签,结果:【2016年国内公映电影排期】,如果此时你想要获取里面的内容,就要这样写:soup.title.string,结果:【2016年国内公映电影排期】,但是你要确定标签里有字符,如果里面是一层套一层的标签,就获取不到内容,返回none,如果举一反三,其他标签里也是这样的。

2. 获取标签里的属性值,如果现在有这样一行文本:

,我想要获取class的值:soup.div['class'],得到结果:[u'global-nav-items'],可以看出来这是个列表,我想要的是值,所以再加一步:soup.div['class'][0],就能得到:global-nav-items

3. 好用的contents,在提取时有时会碰到多层嵌套的标签,比如这样的:

更多
,三层嵌套在一起,而我想得到’更多‘这个内容,结果是这样的:
re = soup.find_all('li') print re[0].contents[1].contents[1].string
如果使用的是soup.li,则re后没有[],很好理解,三层嵌套所以是本体加两个contens,最后用string得到内容。

4. 查找指定标签,比如

,我要找到这个标签就写成:print soup.find_all('div', class_='abstract'),这是查找多个,如果查找一个,则使用find。

5. 提取比较多的而且不规则的标签内容,在上一个例子中我已经查到指定标签,而这个标签里的内容是这样的,

导演: 张猛

主演: 张国立 / 姚晨 / 窦骁

类型: 剧情 / 家庭

制片国家/地区: 中国大陆

年份: 2016

有空格,有换行符,这个内容就很乱了,用soup.find('div', class_='abstract').string已经无法解决问题,于是使用下面这张方法,完美解决,提取到的内容很整齐。
info = soup.find_all('div', class_='abstract')
soup_info = BeautifulSoup(str(info[0])) # beautifulsoup要求使用字符串类型
for line in soup_info.stripped_strings: #对<div>里的内容进行提取
print line
结果:
导演: 张猛
主演: 张国立 / 姚晨 / 窦骁
类型: 剧情 / 家庭
制片国家/地区: 中国大陆
年份: 2016
6.</pre>
  • Title: 强大的BeautifulSoup库
  • Author: algorain
  • Created at: 2017-02-05 11:24:16
  • Updated at: 2023-05-14 21:39:50
  • Link: http://www.rain1024.com/2017/02/05/python-article22/
  • License: This work is licensed under CC BY-NC-SA 4.0.
 Comments