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>
|