一、安装下载:
1、安装:
pip install beautifulsoup4
2、可选择安装解析器:
pip install lxml
pip install html5lib
3、解析器比较:
解析器 | 使用方法 | 优势 | 劣势 |
Python标准库 |
BeautifulSoup(markup, "html.parser") |
- Python的内置标准库
- 执行速度适中
- 文档容错能力强
|
- Python 2.7.3 or 3.2.2)前 的版本中文档容错能力差
|
lxml HTML 解析器 |
BeautifulSoup(markup, "lxml") |
|
|
lxml XML 解析器 |
BeautifulSoup(markup, ["lxml", "xml"])
BeautifulSoup(markup, "xml")
|
|
|
html5lib |
BeautifulSoup(markup, "html5lib") |
- 最好的容错性
- 以浏览器的方式解析文档
- 生成HTML5格式的文档
|
|
|
|
|
|
二、BS的使用:
from bs4 import BeautifulSoup
import requests,re
req_obj = requests.get('https://www.baidu.com')
soup = BeautifulSoup(req_obj.text,'lxml')
'''标签查找'''
print(soup.title) #只是查找出第一个
print(soup.find('title')) #效果和上面一样
print(soup.find_all('div')) #查出所有的div标签
'''获取标签里的属性'''
tag = soup.div
print(tag['class']) #多属性的话,会返回一个列表
print(tag['id']) #查找标签的id属性
print(tag.attrs) #查找标签所有的属性,返回一个字典(属性名:属性值)
'''标签包的字符串'''
tag = soup.title
print(tag.string) #获取标签里的字符串
tag.string.replace_with("哈哈") #字符串不能直接编辑,可以替换
'''子节点的操作'''
tag = soup.head
print(tag.title) #获取head标签后再获取它包含的子标签
'''contents 和 .children'''
tag = soup.body
print(tag.contents) #将标签的子节点以列表返回
print([child for child in tag.children]) #输出和上面一样
'''descendants'''
tag = soup.body
[print(child_tag) for child_tag in tag.descendants] #获取所有子节点和子子节点
'''strings和.stripped_strings'''
tag = soup.body
[print(str) for str in tag.strings] #输出所有所有文本内容
[print(str) for str in tag.stripped_strings] #输出所有所有文本内容,去除空格或空行
'''.parent和.parents'''
tag = soup.title
print(tag.parent) #输出便签的父标签
[print(parent) for parent in tag.parents] #输出所有的父标签
'''.next_siblings 和 .previous_siblings
查出所有的兄弟节点
'''
'''.next_element 和 .previous_element
下一个兄弟节点
'''
'''find_all的keyword 参数'''
soup.find_all(id='link2') #查找所有包含 id 属性的标签
soup.find_all(href=re.compile("elsie")) #href 参数,Beautiful Soup会搜索每个标签的href属性:
soup.find_all(id=True) #找出所有的有id属性的标签
soup.find_all(href=re.compile("elsie"), id='link1') #也可以组合查找
soup.find_all(attrs={"属性名": "属性值"}) #也可以通过字典的方式查找
更多详细的用法:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html#