爬虫(4)—— Beautiful Soup

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'))

扩展方法
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无知的小菜鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值