BeautifulSoup库

Beautiful Soup库

官方文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc
中文文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh
PyPI:https://pypi.python.org/pypi/beautifulsoup4
安装:pip3 install beautifulsoup4
导入:包名为bs4: from bs4 import BeautifulSoup
Beautiful Soup的HTML和XML解析器是依赖于lxml库,安装lxml:pip3 install lxml

解析器

返回目录

解析器 使用方法 优势 劣势
Python标准库 BeautifulSoup(markup, "html.parser") Python的内置标准库、执行速度适中、文档容错能力强 Python
*lxml HTML解析器 BeautifulSoup(markup, "lxml") 速度快、文档容错能力强 需要安装C语言库
lxml XML解析器 BeautifulSoup(markup, "xml") 速度快、唯一支持XML的解析器 需要安装C语言库
html5lib BeautifulSoup(markup, "html5lib") 最好的容错性、以浏览器的方式解析文档、生成HTML5格式的文档 速度慢、不依赖外部扩展

基本用法

返回目录

from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')  # 初始化beautifulsoup对象,会自动更正不标准格式,第一个参数是html字符串,第二个参数是解析器类型
print(soup.prettify())  # prettify()把要解析的字符串以标准的缩进格式输出
print(soup.title.string)  # 选择title标签中的文本

节点选择器(速度快)

返回目录

直接调用节点的名称就可以选择节点元素,只会选择到第一个匹配的节点为Tag类型.

选取功能 选取方法
选择元素 soup.tag1.tag2
得到节点内的文本 soup.tag.string
获取节点的名称 soup.tag.name
获取所有属性,字典类型,属性和属性值 soup.tag.attrs
获取属性值,依据个数返回字符串或列表 soup.tag.attrs["属性"]或soup.tag["属性"]
直接子节点,列表 soup.tag.contents
直接子节点,生成器类型 soup.tag.children
子孙节点,生成器类型 soup.tag.descendants
父节点 soup.tag.parent
祖先节点,生成器类型 soup.tag.parents
获取节点的下一个兄弟元素 next_sibling
获取节点的上一个兄弟元素 previous_sibling
前面兄弟节点的生成器 next_siblings
后面兄弟节点的生成器 previous_siblings

方法选择器

返回目录

find_all()

查询所有符合条件的元素,得到列表

soup.find_all(name , attrs , recursive , text , limit, ketword)

  • name:节点名,字符串
  • attrs:属性,键和值的字典
  • recursive:布尔值,True会递归查找所有子标签(默认),False查找一级标签
  • text:节点的文本,传入字符串或正则表达式对象re.compile(),返回文本组成的列表
  • limit:获取网页中的前x项
  • keyword:关键字参数,选择具有指定属性的标签(冗余功能)

其他方法

方法 功能
find() 返回第一个符合条件的元素
find_parents() 返回所有祖先节点
find_parent() 返回直接父节点
find_next_siblings() 返回后面所有兄弟节点
find_next_sibling() 返回后面第一个兄弟节点
find_previous_siblings() 返回前面所有兄弟节点
find_previous_sibling() 返回前面第一个兄弟节点
find_all_next() 返回节点后所有符合条件的节点
find_next() 返回第一个符合条件的节点
find_all_previous() 返回节点前所有符合条件的节点
find_previous() 返回节点前第一个符合条件的节点

CSS选择器

返回目录

调用select()方法,传入相应的CSS选择器
例如:soup.select('#list-2 .element')

原文地址:https://www.cnblogs.com/Wang-Y/p/9358121.html