Python学习之BeautifulSoup库详解

来源:互联网 发布:网络p2p理财安全吗 编辑:程序博客网 时间:2024/06/06 08:52

BeautifulSoup库是解析、遍历、维护 标签树” 的功能库,本文和大家分享的就是这个库的相关内容,一起来看看吧,希望对大家学习python爬虫有所帮助。

  BeautifulSoup库我们常称之为bs4,导入该库为:from bs4 import BeautifulSoup。其中,import BeautifulSoup即主要用bs4中的BeautifulSoup类。

  bs4库解析器

BeautifulSoup类的基本元素

1 import requests

  2 from bs4 import BeautifulSoup

  3

  4 res = requests.get('http://www.pmcaff.com/site/selection')

  5 soup = BeautifulSoup(res.text,'lxml')

  6 print(soup.a)

  7 # 任何存在于HTML语法中的标签都可以用soup.访问获得,当HTML文档中存在多个相同对应内容时,soup.返回第一个。

  8

print(soup.a.name)

10 # 每个都有自己的名字,可以通过.name获取,字符串类型

11

12 print(soup.a.attrs)

13 print(soup.a.attrs['class'])

14 # 一个可能有一个或多个属性,是字典类型

15

16 print(soup.a.string)

17 #.string可以取到标签内非属性字符串

18

19 soup1 = BeautifulSoup('

','lxml')

20 print(soup1.p.string)

21 print(type(soup1.p.string))

22 # comment是一种特殊类型,也可以通过

.string取到

 

运行结果:

<a href="">登录</a>

 

a

 

{'href': '', 'class': ['no-login']} ['no-login']

  登录

  这里是注释

  <class 'bs4.element.Comment'>

  bs4库的HTML内容遍历

  HTML的基本结构

标签树的下行遍历

其中,BeautifulSoup类型是标签树的根节点。

  1 # 遍历儿子节点

  2 for child in soup.body.children:

  3     print(child.name)

  4

  5 # 遍历子孙节点

  6 for child in soup.body.descendants:

  7     print(child.name)

  标签树的上行遍历

1 # 遍历所有先辈节点时,包括soup本身,所以要if...else...判断

for parent in soup.a.parents:

3     if parent is None:

4         print(parent)

5     else:

6         print(parent.name)

  运行结果:

  div

  div

  body

  html

  [document]

  标签树的平行遍历

1 # 遍历后续节点

  2 for sibling in soup.a.next_sibling:

  3     print(sibling)

  4

  5 # 遍历前续节点

  6 for sibling in soup.a.previous_sibling:

  7     print(sibling)

  bs4库的prettify()方法

  prettify()方法可以将代码格式搞的标准一些,用soup.prettify()表示。在PyCharm中,用print(soup.prettify())来输出。

  操作环境:MacPython 3.6PyCharm 2016.2

 

来源:博客园