爬蟲 - 網(wǎng)頁解析庫
BeautifulSoup
BeautifulSoup 是一個(gè)Python庫,用于從 HTML 提取數(shù)據(jù)
它提供了簡單而靈活的方式來遍歷和搜索文檔樹,以及解析和提取所需的數(shù)據(jù)
安裝
BeautifulSoup的安裝涉及第三方的擴(kuò)展
pip3 install beautifulsoup4
Beautiful Soup支持Python標(biāo)準(zhǔn)庫中的HTML解析器,還支持一些第三方的解析器,其中一個(gè)是 lxml
pip install lxml
基本使用
from bs4 import BeautifulSoup
import requests
url = 'http://www.rzrgm.cn'
header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36'}
res = requests.get(url=url,headers=header)
soup = BeautifulSoup(res.text,'lxml')
show = soup.prettify() #處理好縮進(jìn),結(jié)構(gòu)化顯示
print(show)

遍歷文檔樹
遍歷文檔樹:即直接通過標(biāo)簽名字選擇,特點(diǎn)是選擇速度快,但如果存在多個(gè)相同的標(biāo)簽則只返回第一個(gè)
soup為上文獲取的網(wǎng)頁解析對(duì)象
-
soup.標(biāo)簽名:獲取標(biāo)簽對(duì)象
![]()
-
soup.標(biāo)簽名.name:獲取標(biāo)簽的名稱
![]()
-
soup.標(biāo)簽名.attrs獲取標(biāo)簽的屬性
![]()
-
獲取標(biāo)簽的內(nèi)容
-
soup.標(biāo)簽名.string:某標(biāo)簽下的文本只有一個(gè)時(shí),取到,否則為None
![]()
![]()
-
soup.標(biāo)簽名.strings:拿到一個(gè)生成器對(duì)象, 取到某標(biāo)簽下所有的文本內(nèi)容
![]()
-
soup.標(biāo)簽名.text:取到某標(biāo)簽下所有的文本內(nèi)容
![]()
-
soup.標(biāo)簽名.stripped_strings:去掉空白
![]()
-
-
嵌套選擇
![]()
-
子節(jié)點(diǎn)、子孫節(jié)點(diǎn)
-
soup.標(biāo)簽名.contents:某標(biāo)簽下所有子節(jié)點(diǎn)
![]()
-
soup.標(biāo)簽名.children:得到一個(gè)迭代器,包含某標(biāo)簽下所有子節(jié)點(diǎn)
![]()
-
-
父節(jié)點(diǎn)、祖先節(jié)點(diǎn)
-
soup.標(biāo)簽名.parent:獲取父節(jié)點(diǎn)
![]()
-
soup.標(biāo)簽名.parents:獲取父節(jié)點(diǎn)的父節(jié)點(diǎn),生成器
![]()
-
搜索文檔樹
find 和 find_all
兩者的唯一區(qū)別是:find_all() 方法的返回結(jié)果是值包含一個(gè)元素的列表,而 find() 方法直接返回結(jié)果
-
name:搜索name參數(shù)的值可以使任一類型的 過濾器
![]()
-
keyword:key=value的形式,value可以是過濾器:字符串 , 正則表達(dá)式,列表, True
注意class是關(guān)鍵字,所以要加
_![]()
-
按照類名查找
查找class = post-meta-item 的span標(biāo)簽
![]()
-
limit:find_all限制條數(shù)
查找class = post-meta-item 的span標(biāo)簽,輸出兩條結(jié)果
![]()
五種過濾器
-
字符串:即標(biāo)簽名
![]()
-
正則表達(dá)式
![]()
-
列表
如果傳入列表參數(shù),Beautiful Soup會(huì)將與列表中任一元素匹配的內(nèi)容返回.下面代碼找到文檔中所有<a>標(biāo)簽和<p>標(biāo)簽:
![]()
-
True
可以匹配任何值,下面代碼查找到所有的tag,但是不會(huì)返回字符串節(jié)點(diǎn)
![]()
CSS選擇器
暫不贅述
Xpath
from lxml import etree
XPath 是一門在 XML 文檔中查找信息的語言
import requests
from lxml import etree
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36'}
url = 'http://www.rzrgm.cn'
res = requests.get(url=url,headers=header)
html = etree.HTML(res.text)
節(jié)點(diǎn)
-
所有節(jié)點(diǎn)
![]()
-
指定節(jié)點(diǎn)(結(jié)果為列表)
![]()
-
子節(jié)點(diǎn),子孫節(jié)點(diǎn)
![]()
-
父節(jié)點(diǎn)
![]()
![]()
屬性匹配

-
文本獲取
![]()
-
屬性獲取
![]()
| 表達(dá)式 | 含義 |
|---|---|
| nodename | 選取此層級(jí)節(jié)點(diǎn)下的所有子節(jié)點(diǎn) |
| / | 代表從根節(jié)點(diǎn)進(jìn)行選取 |
| // | 可以理解為匹配,就是在所有節(jié)點(diǎn)中選取此節(jié)點(diǎn),直到匹配為止 |
| . | 選取當(dāng)前節(jié)點(diǎn) |
| … | 選取當(dāng)前節(jié)點(diǎn)上一層(上一級(jí)目錄) |
| @ | 選取屬性(也是匹配) |





























浙公網(wǎng)安備 33010602011771號(hào)