BeautifulSoup

灵活又方便的网页解析库,处理高效,支持多种解析器。利用它不用编写正则表达式即可方便地实现网页信息的提取。

1 安装:

pip3 install beautifulsoup4

2 使用:

2.1 解析库:

解析器 优势 劣势
python标准库 (html.parse) python内置标准库
执行速度适中文档容错能力强
与之前版本中文容错能力差
lxml html解析器 速度快,文档容错能力强 需要安装C语言库?
lxml XML解析器 速度快,唯一支持XML的解析器 需要安装C语言
html5lib 最好的容错性,以浏览器的放式解析文档生成html5格式的文档 速度慢

2.2:标签选择器:

from bs4 import BeautifulSoup
soup = BeautifulSoup(html.'xml')

  • soup.prettify()
    格式化代码,补全,容错处理
  • soup.title.string()
    选中title打印里面的内容
  • print(soup.title)
  • pirnt(type(soup.title))
  • print(soup.head)
  • print(soup.p)
    连同标签一起打印,只打印第一个结果

获取名称:

  • print(soup.title.name)
    title

获取属性:

  • print(soup.p.attrs['name'])
  • print(soup.p['name']

获取内容:

  • print(soup.p.string)

嵌套选择:

  • print(soup.head.title.string)

子节点和子孙节点:

  • print(soup.p.contents)
    获取子节点返回类型为列表
获取子节点
for i, child in enumerate(soup.p.children):
  print(i, child)
#返回类型为迭代器
获取子孙节点
for i, child enumerate(soup.p.descendants):
  print(i,child)
#返回类型为迭代器

父节点和祖先节点:

  • print(soup.a.parent)
    获取父节点
  • print(list(enumerate(soup.a.parents)))
    枚举,并转化成列表
    获取所有祖先节点

获取兄弟节点:

  • print(list(enumerate(soup.a.next_siblings)))
    获取后面的兄弟节点
  • print(list(enumerate(soup.a.previous_siblings)))
    获取之前的兄弟节点

2.3 标准选择器:
find_all(name,attrs,recursive,text,**kwargs)

  • print(soup.find_all('ul'))
  • print(soup.find_all(attrs={'name',elements'}))

特殊类型:

  • print(soup.find_all(id='list-1'))
  • print(soup.find_all(class_='element'))

text:

  • print(soup.find_all(text='Foo'))

find(name,attrs,recursive,text,**kwargs)

find返回单个元素,find_all返回所有元素

find_parents()
find_parent()

find_parents()返回所有祖先节点,find_parent()返回直接父节点

find_next_siblings()
find_next_sibling()

find_next_siblings()返回后面所有兄弟节点
find_next_sibling()返回后面第一个兄弟节点

find_previous_sblings()
find_previous_sibling()

find_previous_sblings()返回前面所有兄弟节点
find_previous_sibling()返回前面第一个兄弟节点

find_all_next()
find_next()

find_all_next()返回节点后所有符合条件的节点,
find_next()返回节点后第一个符合条件的节点

find_all_previous()
find_previous()

find_all_previous()返回节点前所有符合条件的节点,
find_previsous(()返回第一个符合条件的节点

2.4 CSS选择器:
通过select()直接传入CSS选择器即可

print(soup.select('.pane .pane-heading'))  # .代表class属性
print(soup.select('ul i'))
print(soup.select('#list-2 .element'))  # #代表id

#获取属性
for ul in soup.select('ul'):
  print(ul['id'])  #获取属性
  print(ul.attrs['id']  #获取属性

#获取内容
for ul in soup.select('li')
  print(ul.get_text())

你可能感兴趣的:(BeautifulSoup)