課程鏈接先給各位? ↓↓↓ (點擊即可食用.QAQ
Datawhale-學用 AI,從此開始
一、數據的解析與提取
數據提取的幾種方式:
re
解析bs4
解析xpath
解析
1.1正則表達式(Reuglar Experssion)
RE是一種用于字符串匹配的規則描述方式。它通過特定的組合字符來定義字符串的模式,從而實現對字符串的搜索、匹配、替換等操作。Python也支持同樣re的用法,需要引入模塊import re。
使用場景
-
用于簡單的文本提取,尤其是當目標內容有明確的模式,我們平常搜個作文或者材料的文字內容;
-
用于快速驗證字符串格式,這個寫過web的朋友都知道,需要登錄驗證,還可以進行高亮提示,用Ajax刷新;
-
對于結構簡單的HTML或文本內容,可以快速提取特定信息,用于快速抽取想要爬取的目標數據格式。
優點
-
高效:正則表達式在處理簡單模式匹配時速度快;
-
靈活:可以通過復雜的正則表達式匹配幾乎任何文本模式,當然加密的內容需要另說;
-
簡單:不需要額外的第三方庫,使用原生Python自帶
re
模塊即可完成。
缺點
-
復雜:對于雜復的HTML、XML文檔,正則表達式很容易失,尤其是密加文檔,密解需要
-
出易錯:HTML、XML嵌套場景結構,在使用時正則表達式無法準確匹配。
-
性能不穩定:復雜的正則表達式在處理大型文本時可能會導致性能問題。
1.2BeautifulSoup解析(bs4
)
Bs4
是一個用于解析HTML、XML文檔的Python庫。它提供了一種簡單而直觀的方式來查找、提取和操作HTML、XML中的標簽和內容。BeautifulSoup
通常與requests
庫結合使用,用于抓取網頁內容并解析。
使用場景
-
用于解析文檔,尤其是需要提取標簽內容、屬性的時候,直接一整個提出來;
-
處理結構復雜的網頁內容,這里的復雜指的是嵌套復雜,加密還需要單獨解答;
-
用于數據爬取、網頁內容提取等一般情況下;
優點
-
簡單上手使用:API非常之多,網上的案例也是很多,大家易于學習和使用;
-
兼容性好:可以結合多種解析器如
html.parser
、lxml
、html5lib
等配合使用; -
容錯相比較高:能夠處理不規范的HTML文檔。
缺點
-
性能不穩定:對于非常大的HTML文檔,
bs4反應
慢; -
需要額外安裝庫:需要安裝額外
beautifulsoup4
和解析器
1.3 XPath(XML Path Language)解析
XPath是一種在XML和HTML文檔中查找信息的語言。它使用路徑表達式來選定文檔中的節點或節點集,XPath是W3C標準,廣泛應用于文檔的解析,在Python中添加lxml
庫可食用
使用場景
-
用于需要精確查找HTML、XML文檔中的節點或節點集;
-
處理結構復雜的文檔,尤其是需要根據多種條件(如標簽名、屬性、文本內容等)進行精確匹配時常用于
-
本節課中的數據爬取、自動化測試等場景;
優點
-
精確性高:可以通過復雜的路徑表達式精確查找節點;
-
性能好:
lxml
庫的XPath解析器通常比BeautifulSoup
更快; -
兼容性高:支持節點選擇、屬性選擇、文本選擇等
缺點
-
語法難:XPath語法相對復雜,需要一定的學習成本;
-
需要額外安裝庫:需要安裝
lxml庫
二、群內的問題
在BeautifulSoup模塊中 find()和find_all()的區別?
共同點:都可以用于解析 HTML 、 XML 文檔查找特定的標簽或內容;
不同點:find找文檔的第一個匹配內容,如果沒找到就返回none,所以只找一個find快;find_all找所有的匹配內容,全部沒有就返回空,適合匹配內容多的場景。
在使用方法上:
from bs4 import BeautifulSoup
<html><head><title>Test Page</title></head><body><p class="title">Hello, world!</p >nbnb</body>
</html>
soup = BeautifulSoup(html_doc, 'html.parser')# 使用 find()查找第一個匹配的標簽
first_p = soup.find('p')
print("First <p> tag:", first_p)
## First <p> tag: <p class="title">Hello, world!</p >
# 使用 find_all()查找所有匹配的標簽。,
all_a = soup.find_all('a')
print("All <a> tags:", all_a)
## All <a> tags: [ nb,nb]
三、總結
正則表達式(re
):用于簡單的文本提取和驗證,但不適合復雜的HTML或XML解析,在網上搜作文寫作材料等等之類的可以使用re,包括寫web登錄頁面后端數據核驗的時候,也可以加上re的判斷,后期將為安全性能提供保障。
BeautifulSoup(bs4
):用于解析HTML、XML文檔,尤其是需要提取標簽內容或屬性時,就可以用bs4,但是同樣是找標簽屬性沒有人家xpath跑的快,所以結合實際情況選擇進行
XPath:用于精確查找HTML、XML文檔中的節點,性能較好,就是語法有些難,對剛入門的新手不太友好,學到半截有可能就勸退放棄了,理性選擇
在實際使用場景中,可以根據業務的相關需求選擇合適的解析方式
如果只是提取簡單的文本信息搜搜作文、思想匯報這類型的,可以使用正則表達式,如果需要解析HTML、XML文檔并提取標簽內容,可以使用BeautifulSoup、xpath
,一些精確查找節點并處理復雜文檔,就選XPath。。。。
為了反機器爬取,我將本文中許多語序和詞語行進調整了,正常人工查看是閱讀毫無礙障的,機器爬取則會產生一些困難,同時html及一些練習就不提到單獨了,請大家操作也在隔離安全的環境下操作,學習首先也要保護好自己,需要注意的點是,Python原生的鏡像下載庫比較慢,可以更換源后進行下載,這里馬老師也寫了清華的下載源,請大家參考。
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple bs4