BeautifulSoup 总结

本文介绍了BeautifulSoup库在网页内容解析中的应用,包括三种解析方式:结合requests获取soup对象,利用find方法提取标签,以及使用select方法选择特定标签和属性。通过示例展示了如何读取网页数据并提取所需信息,强调了class和ID属性值的选择方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BeautifulSoup是Python的一个库,最主要的功能就是从网页爬取我们需要的数据。
BeautifulSoup将html解析为对象进行处理,全部页面转变为字典或者数组,

相对于正则表达式的方式,可以大大简化处理过程。

BeautifulSoup总结:

BeautifulSoup的三种解析方式:

soup1 = BeautifulSoup(html, "lxml")  # lxml解析方式 速度快容错能力强
soup2 = BeautifulSoup(html, "html.parser")  # 常规网页解析方式 python内置标准库,执行速度快
soup3 = BeautifulSoup(html, "html5lib")  # html5解析方式 以浏览器方式解析最好容错性  速度慢

结合requests 读取网页内容之后利用BeautifulSoup变成一个soup对象:

response = requests.get("http://www.youzi4.cc/")#请求url 
html=response.text #读取网页源代码
soup=BeautifulSoup(html,"html.parser")#常规网页解析方式 python内置标准库,执行速度快

利用soup对象进行网页内容提取:

print(soup.head)

head为要提取元素的标签,可以是任意标签(head 、body、title、a、p、img等),只能提取最先出现的一个。

print(soup.find_all("a")) #在网页中提取所有的a标签 是一个列表list类型
for link in soup.find_all("a"): #循环遍历所有的a标签
    #print(link)
    #print(link.get("href")) #取出a标签中所有的链接
    print(link["href"]) #取出a标签中所有的链接 与上部一样

soup.find("所要提取的标签") 提取出标签之后会是一个列表类型的,可以用for语句循环遍历输出,另外中括号【】里面是所要提取标签之间属性的属性值。

还有一个重要的方法select方法:

print(soup.select("li"))
for link in soup.select("li"):  # 循环遍历a标签
    print(link)
print(soup.select(".IndexListUnion_3")) #根据class属性去选取标签之间的内容打印全部是一个list类型
for data in soup.select(".IndexListUnion_3"): 
    print(data)
print(soup.select("#AutoTagHeight_0")) #根据ID去选取内容
for data in soup.select("#AutoTagHeight_0"): #循环遍历
    print(data)

select方法可以选择标签、属性值

soup.select("所要选取的标签") 标签取出后也是一个list类型,可以for循环遍历输出

如果遇到如下:

<ul class="BannerTagList" id="AutoTagHeight_0">

可以利用soup.select(".BannerTagList")或者soup.select("#AutoTagHeight_0")选取

注意:class的属性值要用 .后加属性值 ID的属性值要用 #加属性值

html 是一段从网页中读取的网页数据。

读取网页具体示例:

#coding:utf-8
from bs4 import BeautifulSoup
import requests
from requests import exceptions

try:
    url = "http://www.youzi4.cc/" #所要请求的网址
    response = requests.get(url,timeout=5)#请求url 若超过5秒便自动放弃
    print(response.status_code)#打印网页状态码
    html=response.text #读取网页源代码
    soup1=BeautifulSoup(html,"html.parser")#常规网页解析方式 python内置标准库,执行速度快
    soup2 = BeautifulSoup(html, "lxml")  # lxml解析方式 速度快容错能力强
    soup3 = BeautifulSoup(html, "html5lib")  # html5解析方式 以浏览器方式解析最好容错性  速度慢
    print(soup1.prettify()) #打印soup1中对象的内容格式化输出
except requests.exceptions.ConnectionError as e: #进行错误处理并输出原因
    print(e)

利用Beautiful创建的对象是<class 'bs4.BeautifulSoup'>类型,此类型可以利用内置的方法打印所要内容。

选择简单元素示例:

#coding:utf-8
from bs4 import BeautifulSoup
import requests
from requests import exceptions

try:
    url = "http://www.youzi4.cc/" #所要请求的网址
    response = requests.get(url,timeout=5)#请求url 若超过5秒便自动放弃
    print(response.status_code)#打印网页状态码
    html=response.text #读取网页源代码
    soup=BeautifulSoup(html,"html.parser")#常规网页解析方式 python内置标准库,执行速度快
    print(type(soup))#soup的类型<class 'bs4.BeautifulSoup'>
    title = soup.title #选择网站的title标题
    # 提取title标签    <title>美女图片_美女写真_性感美女_mm图片大全_人体艺术照_爆乳美女 - 优姿美女</title>
    print(title)
    # 提取title标签之间的文本 美女图片_美女写真_性感美女_mm图片大全_人体艺术照_爆乳美女 - 优姿美女
    print(title.string) 
    #选择body
    body = soup.body
    print(body) #打印body的内容
    #提取a标签 网页中会有多个a标签默认只提取第一个
    print(soup.a)
    print(soup.a.attrs) #将a标签中的属性值打印出来 类型为字典类型<type 'dict'>
    print(soup.a["href"]) #将a标签中的href属性打印出来
    print(soup.find_all("a")) #在网页中提取所有的a标签 是一个列表list类型
    for link in soup.find_all("a"): #循环遍历所有的a标签
        #print(link)
        #print(link.get("href")) #取出a标签中所有的链接
        print(link["href"]) #取出a标签中所有的链接 与上部一样
except requests.exceptions.ConnectionError as e: #进行错误处理并输出原因
    print(e)

select方法:

for link in soup.select("a"): #循环遍历a标签
     print(link)
print(soup.select("li"))
for link in soup.select("li"):  # 循环遍历a标签
     print(link)
print(soup.select(".IndexListUnion_3")) #根据class属性去选取标签之间的内容打印全部是一个list类型
for data in soup.select(".IndexListUnion_3"): 
     print(data)
print(soup.select("#AutoTagHeight_0")) #根据ID去选取内容
for data in soup.select("#AutoTagHeight_0"): #循环遍历
  print(data)
select特殊用法:
print soup.select("body > p") #body下面直接的p子标签
print soup.select("p > a")#p下面直接的a子标签
print soup.select("p > .sister")#p下面直接的class="sister"的子标签

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值