概述
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 总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复