c 抓取网页数据(BeautifulSoupPython安装C语言库教程)
优采云 发布时间: 2022-04-13 03:27c 抓取网页数据(BeautifulSoupPython安装C语言库教程)
美丽的汤
BeautifulSoup(markup, 'html.parser')
Python内置标准库,执行速度适中,文档容错能力强
BeautifulSoup(markup, 'lxml')
速度快,文档容错能力强,需要安装C语言库
BeautifulSoup(markup, 'xml')
快,唯一支持XML的解析器,需要安装C语言库
BeautifulSoup(markup, 'html5lib')
提供最佳的容错能力,以类似浏览器的方式解析文档,生成HTML5格式的文档,速度慢,不依赖外部扩展
# 使用lxml库解析,完成BS对象初始化(可以自动更新HTML格式)
soup = BeautifulSoup(html, 'lxml')
# 把要解析的字符串以标准的缩进格式输出
print(soup.prettify())
# 输出soup内容中title节点的文本内容
print(soup.title.string)
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
print(soup.title)
print(type(soup.title))
print(soup.title.string)
print(soup.head)
print(soup.p)
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
# 获取节点名称
print(soup.title.name)
# 获取一个节点的所有属性(以字典的形式返回)
print(soup.p.attrs)
# 获取p节点属性名为name的值
print(soup.p.attrs['name'])
print(soup.p['name'])
print(soup.p['class'])
# 获取p节点的直接子节点(contents返回的是直接子节点组成的列表)
print(soup.p.contents)
# 获取p节点下的所有孩子节点(children返回的是一个*敏*感*词*类型)
print(soup.p.children)
for i, child in enumerate(soup.p.children):
print(i, child)
# 获取所有子孙节点
print(soup.p.descendants)
for i, child in enumerate(soup.p.descendants):
print(i, child)
# 获取p节点的父亲
print(soup.p.parent)
# 获取p节点的所有祖先
print(type(soup.p.parents))
print(list(enumerate(soup.p.parents)))
# 获取下一个兄弟
print(soup.a.next_sibling)
# 获取上一个兄弟
print(soup.a.previous_sibling)
# 获取下面的兄弟
print(list(enumerate(soup.a.next_siblings)))
# 获取上面的兄弟
print(list(enumerate(soup.a.previous_siblings)))
# 获取a节点的祖先节点类型
print(type(soup.a.parents))
# 获取a节点的第一个祖先
print(list(soup.a.parents)[0])
# 获取a节点的第一个祖先的class属性
print(list(soup.a.parents)[0].attrs['class'])
find_all:查找所有匹配的元素
# find_all()参数说明:
"""
find_all(name, attrs, recursive, text, **kwargs)
"""
from bs4 import BeautifulSoup
html = """
first item
second item
third item
fourth item
fifth item
"""
soup = BeautifulSoup(html, 'lxml')
# 调用find_all()方法查询所有ul节点,返回结果是列表类型,每个元素时bs4.element.Tag类型
print(soup.find_all(name='ul'))
# 再查出ul里面的li
for ul in soup.find_all(name='ul'):
print(ul.find_all(name='li'))
# 遍历每一个li节点拿文本内容
for ul in soup.find_all(name='ul'):
for li in ul.find_all(name='li'):
print(li.string)
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
print(soup.find_all(text=re.compile('link')))
find():返回找到的第一个结果
find_parents():返回所有祖先节点
find_parent():返回直接父节点
find_next_siblings():返回所有后续兄弟
find_next_siblings():返回后面的第一个兄弟节点
find_previous_siblings():返回所有以前的兄弟姐妹
find_previous_siblings():返回前面的第一个兄弟节点
find_all_next():返回节点后所有满足条件的节点
find_next():返回后面第一个满足条件的节点
find_all_previous:返回节点之前所有符合条件的节点
find_previous:返回节点前第一个满足条件的节点