我是靠谱客的博主 无心嚓茶,最近开发中收集的这篇文章主要介绍BeautifulSoup 总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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"的子标签

最后

以上就是无心嚓茶为你收集整理的BeautifulSoup 总结的全部内容,希望文章能够帮你解决BeautifulSoup 总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部