Beautiful Soup入门
简介:
Beautiful Soup 库是解析、遍历、维护“标签树”的功能库
BeautifulSoup最主要的功能是从网页抓取数据,Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。
安装:
使用cmd命令行,输入命令:pip install beautifulsoup4
库的基本使用
from bs4 import BeautifulSoup
soup=BeautifulSoup('<p>data</p>','html.parser')
soup=BeautifulSoup(open('D:abc.html'),'html.parser')
第一个参数html代码,第二个参数解析HTML的解析器
BeautifulSoup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,如果我们不安装它,则 Python 会使用 Python默认的解析器
对Beautiful Soup库的检测
import requests
from bs4 import BeautifulSoup
r = requests.get('http://python123.io/ws/demo.html')
demo = r.text
soup = BeautifulSoup(demo, 'html.parser')
print(soup.prettify()) # 将获取的代码以html结构进行输出
Beautiful Soup库解析器
Beautiful Soup类的基本元素
关于上述元素的一些使用
# 获取HTML的title
import requests
from bs4 import BeautifulSoup
r = requests.get('http://python123.io/ws/demo.html')
demo = r.text
soup = BeautifulSoup(demo, 'html.parser')
print(soup.title)
# 获取HTML中的某个标签,如果存在多个相同的标签只会返回第一个标签
tag = soup.a
print(tag)
# 获取HTML的a标签的标签名
print(soup.a.name)
# 获取a标签父标签的标签名
print(soup.a.parent.name)
# 获取a标签父标签的父标签的标签名
print(soup.a.parent.parent.name)
# 获取标签的所有属性(标签的属性会以字典的形式输出)
print(soup.a.attrs)
# 获取标签某个属性的具体值
print(soup.a.attrs['href'])
# 获取标签中的具体信息
print(soup.a.string)
HTML的遍历
标签树的下行遍历:
常见的使用
# 获取某个标签的儿子标签,返回值是包含所有儿子标签的列表
head = soup.head
print(head)
print(head.contents)
# 遍历儿子节点(注换行符也算一个标签)
for child in soup.body.children:
print(child)
标签树的上行遍历
例:对a标签的上行遍历
for parent in soup.a.parents:
if parent is None:
print(parent)
else:
print(parent.name)
标签树的平行遍历
注:
1、平行遍历必须发生在同一个父节点下的各个节点间
2、平行遍历不一定得到标签,需要进行一定的判断处理
3、平行遍历中,文本字符串也会被看作标签
例:
# 对a标签进行后续遍历
for sibling in soup.a.next_siblings:
print(sibling)
# 对a标签进行前续遍历
for sibling in soup.a.previous_siblings:
print(sibling)
信息组织的提取
find_all()
常见的用法:
# 查找a标签
a=soup.find_all('a')
print(a)
# 查找多个标签
a=soup.find_all(['a','p'])
print(a)
# 查找HTML中有那些标签
for tag in soup.find_all(True):
print(tag.name)
# 查找含有course属性值的p标签
print(soup.find_all('p',{'course'}))
# 查找id为link1的标签
print(soup.find_all(id='link1'))
扩展方法