标签:link mode 名称 doc attrs 标签 自动补全 正则匹配 block
Beautiful:
- 解析器:
lxml, html.parser
?
soup = BeautifulSoup(解析的文档, ‘解析器‘)
?
- 美化功能
soup.prettify
?
- 遍历文档树 ****
1.直接搜索
soup.head
?
2.获取标签的名称
soup.a.name
?
3.获取标签的属性
soup.a.attrs[‘href‘]
?
4.获取标签的内容
soup.p.text
?
5.嵌套查找
soup.p.b
?
6.子节点,子孙节点
soup.p.children
soup.p.descendants
?
7.父节点、祖先节点
soup.a.parent
soup.a.parents
8.兄弟节点
# 查找下面的兄弟
soup.a.next_sibling
soup.a.next_siblings
?
# 查找上面的兄弟
soup.a.previous_sibling
soup.a.previous_siblings
?
- 搜索文档树 *******
find: 找第一个
find_all(): 找所有
name、attrs、text
?
- 文本过滤器 *******
根据字符串进行过滤
?
soup.find(name=‘a‘)
soup.find_all(name=‘p‘)
soup.find_all(attrs={"id": "link2"})
soup.find(name=‘a‘, attrs={"id": ‘p‘})
?
- re正则过滤器
根据正则匹配过滤
?
soup.find_all(name=re.compile(‘a‘))
soup.find_all(attrs={‘id‘: re.compile(‘k‘)})
- 列表过滤器
根据列表内的元素匹配
?
soup.find_all(name=[‘a‘, ‘p‘])
soup.find_all(attrs={"id": [‘link‘, ‘k‘]})
?
- bool过滤器
?
soup.find_all(name=True)
soup.find_all(attrs={"id":True})
?
- 方法过滤器
?
def has_id_not_class(tag):
if tag.has_attr(‘id‘) and not tag.has_attr(‘class‘):
return tag
?
soup.find_all(name=has_id_not_class)
?
- 补充
soup.find_all(id="link")
soup.find_all(class_=‘sister‘)
解析库:
BeautifulSoup4
- 安装:
- 解析库安装
pip3 install beautifulsoup4
- 解析器安装
pip3 install lxml
- 基本使用
- 导入模块
from bs4 import BeautifulSoup
- 调用解析库BeautifulSoup
# 第一个参数是 解析的文本
# 第二个参数是 解析器
# 自动补全文档标签
soup = BeautifulSoup(html_doc, ‘lxml‘)
print(soup)
- 标签美化
# prettify
html = soup.prettify()
print(html)
soup = BeautifulSoup(html, ‘lxml‘)
print(soup)
- 遍历文档树
‘‘‘
1、直接使用
2、获取标签的名称
3、获取标签的属性
4、获取标签的内容
5、嵌套选择
6、子节点、子孙节点
7、父节点、祖先节点
8、兄弟节点
‘‘‘
- 搜索文档树
- find
查找第一个
- find_all
查找所有
- 标签查找与属性查找:
- 标签:
- 字符串过滤器 字符串全局匹配
name 属性匹配
attrs 属性查找匹配
text 文本匹配
- 正则过滤器
re模块匹配
- 列表过滤器
列表内的数据匹配
- bool过滤器
True匹配
- 方法过滤器
用于一些要的属性以及不需要的属性查找。
- 属性:
- class_
- id
配合requests模块使用:
import requests
res = requests.get(‘https://www.cnblogs.com/kermitjam/p/10863925.html‘)
print(res.text)
from bs4 import BeautifulSoup
soup = BeautifulSoup(res.text, ‘lxml‘)
标签:link mode 名称 doc attrs 标签 自动补全 正则匹配 block
原文地址:https://www.cnblogs.com/tangda/p/10960974.html