當前位置:
首頁 > 最新 > BeatifulSoup,Xpath,CSS 選擇器的性能比較

BeatifulSoup,Xpath,CSS 選擇器的性能比較

今天來講講關於網頁解析器的介紹,一般我們將網頁下載下來後,就要提取裡面的自己想要的內容了,python庫自帶的正則表達式re庫雖然能完成這個任務,但是對於一些網頁結構比較複雜點的網站,使用re庫構造正則表達式就變得很費力了,所以需要引入第三方庫。

目前,市面上常見的網頁解析器除了re,還有BeautifulSoup庫,lxml庫(Xpath, CSS),今天我們來比較一下這兩個第三方庫的性能。

代碼如下所示:

importrequests

frombs4importBeautifulSoup

fromparselimportSelector

fromlxmlimportetree

importtime

defget_html(url):

try:

r = requests.get(url)

r.raise_for_status()

r.encoding = r.apparent_encoding

returnr.text

except:

return""

defbs_parse(html):

results1 = []

soup = BeautifulSoup(html,"html.parser")

a = soup.find_all("a")

foriina:

try:

href = i.get("href")# 等同於 href = i.attrs["href"]

results1.append(href[])# 表示匹配 sh 或者 sz 加6位數字的內容

except:

continue

defbs_parse_with_lxml(html):

results1 = []

soup = BeautifulSoup(html,"lxml")

a = soup.find_all("a")

foriina:

try:

href = i.get("href")# 等同於 href = i.attrs["href"]

results1.append(href[])# 表示匹配 sh 或者 sz 加6位數字的內容

except:

continue

defxpath_parse(html):

s = Selector(text=html)

results2= s.xpath("//a[@href]/text()").extract()

defxpath_etree(html):

s = etree.HTML(html)

results2= s.xpath("//a[@href]/text()")

defcss_parse(html):

s = Selector(text=html)

results3= s.css("a::attr(href)").extract()

defmain():

url ="http://quote.eastmoney.com/stocklist.html"

html = get_html(url)

num_iterations =100# 每個爬蟲測試100次

function_called = [("bs", bs_parse), ("bs_lxml", bs_parse_with_lxml),

("xpath", xpath_parse),("xpath_etree", xpath_etree), ("css", css_parse)]

forname, funcinfunction_called:

start_time = time.time()

foriinrange(num_iterations):

func(html)

end_time = time.time()

print("=================================================================")

print("%s: %.2f seconds"% (name, end_time - start_time))

main()

運行結果如下:

下面進行總結:

Xpath和CSS都是使用lxml庫,在使用Selector進行網頁解析的情況下,CSS比Xpath稍微快一點點,但是如果Xpath引入lxml的etree進行解析,則比CSS快,不過Xpath定位元素比CSS容易好多,個人偏向於使用Xpath。

BeautifulSoup庫是最慢的,因為bs也支持lxml,在bs中使用lxml能大幅提高解析速度,但是和Xpath和CSS差距還是很大。

lxml庫和re庫的速度相當,有些地方也還是要使用到re庫的。

所以,在日常解析網頁中,一般都是以xpath為主,re為輔。

下面給出Xpath和CSS的一張比較圖。

關於Xpath和CSS語法就不在這詳細介紹了,感興趣的小夥伴可以在網路上搜下。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器學習入門日記 的精彩文章:

TAG:機器學習入門日記 |