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 45 |
导入库: 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> |