Python爬蟲中html資料抽取方法對比分析

2021-10-02 18:14:20 字數 3833 閱讀 6335

python中常用的html資料抽取方法有正則、xpath和beautifulsoup這三種。其中,最常用的xpath庫是lxml。今天再介紹乙個庫simplifieddoc,一起比較一下他們的優劣。

1、安裝

名稱安裝方法

包大**明

正則不需安裝(內建)

lxml

pip install lxml

4.5mb

依賴c語言庫

beautifulsoup

pip install beautifulsoup4

107kb

如果不使用第三方庫,則不需要別的安裝

simplifieddoc

pip install simplified-scrapy

43kb

沒有第三方依賴

2、python版本支援

這幾種方法都同時支援python2和python3。

3、使用方法

對正則和xpath的使用方法,這裡就不重複了,只簡單對比下beautifulsoup和simplifieddoc。下面的**展示了兩者例項化及提取資料的方法。

html =

'''test text

'''# 例子:

from bs4 import beautifulsoup

soup = beautifulsoup(html,features=

'html.parser'

)soup = beautifulsoup(html,features=

'lxml'

)title = soup.title

# 取所有

divs = soup.findall(id=

'test'

)divs = soup.select(

'div#test'

)# 取第乙個

div = soup.find(id=

'test'

)div = soup.select_one(

'div#test'

)print

(div.text)

# 例子:

from simplified_scrapy import simplifieddoc

doc = simplifieddoc(html)

title = doc.title

# 取所有

divs = doc.getelements(

'div'

,attr=

'id'

,value=

'test'

)divs = doc.selects(

'div#test'

)# 取第乙個

div = doc.getelement(

'div'

,attr=

'id'

,value=

'test'

)div = doc.select(

'div#test'

)print

(div.text)

在使用方法上,有相似的地方,也有不同的地方,但是都挺簡單的。這裡特別提一下simplifieddoc中的getelement方法,每個方法中都有三個可選的引數start=none,end=none,before=none。使用這三個引數,可以幫助定位需要抽取的資料,在合適的時候,可以使抽取很方便。

4、效能對比

在處理速度上,對於正則,處理速度快,並且是有針對性的只處理需要的資料,所以比較公認的是處理速度最快的方式,但是使用起來相對困難。下面只對比lxml、beautifulsoup、simplifieddoc這三種方式。對比**如下:

from lxml import etree

from bs4 import beautifulsoup

from simplified_scrapy import simplifieddoc

import time

html =

'''this domain is for use in illustrative examples in documents. you may use this

domain in literature without prior coordination or asking for permission.

more information...

'''start = time.time(

)for i in

range(0

,1000):

root = etree.html(html)

text = root.xpath(

'//h1/text()')[

0]print

(time.time(

)-start,text)

start = time.time(

)for i in

range(0

,1000):

soup = beautifulsoup(html,features=

'html.parser'

) text = soup.h1.text

print

(time.time(

)-start,text)

start = time.time(

)for i in

range(0

,1000):

soup = beautifulsoup(html,features=

'lxml'

) text = soup.h1.text

print

(time.time(

)-start,text)

start = time.time(

)for i in

range(0

,1000):

doc = simplifieddoc(html)

text = doc.h1.html

print

(time.time(

)-start,text)

使用vscode測試對比結果如下:

名稱除錯模式耗時(單位:秒)

lxml

0.10795402526855469

beautifulsoup(html.parser)

2.5450849533081055

beautifulsoup(lxml)

2.236968994140625

simplifieddoc

0.25988101959228516 名稱

非除錯模式耗時(單位:秒)

lxml

0.12264490127563477

beautifulsoup(html.parser)

0.799994945526123

beautifulsoup(lxml)

0.7144896984100342

simplifieddoc

0.14832687377929688

不管除錯模式或非除錯模式,lxml的速度是最快的,simplifieddoc第二,beautifulsoup第三。其中有乙個奇怪的地方不知道是怎麼回事,非除錯模式下較除錯模式下速度都相對提高,lxml卻是變慢了。

5、總結

lxml不負眾望速度是除正則外最快的,小眾的simplifieddoc速度挺快,使用方法也簡單,值得大家試用一下。

名稱安裝難度

使用難度

速度包大小

正則無(內建)

困難最快

無lxml

一般一般快大

beautifulsoup

簡單容易慢較小

simplifieddoc

簡單容易較快小

Python爬蟲之HTML知識

html是一種標記語言,標記語言是一套標記,html用標記語言來描述網頁。1.html的基本結構 1 內容 html 文件是由包裹,這是html文件的文件標記,也稱為html開始標記。2 html 檔案頭標記,主要包含檔案的基本資訊,比如網頁的標題 關鍵字,在內容部分可以放置,等標記。該內容不會在瀏...

Python爬蟲實戰之解密HTML

1.增加本人csdn訪問量 2.當作乙個python的練手專案 3.想寫出更優質的部落格技術文章,不再為了訪問量去寫文章。author ytouch date 2019 07 27 this py is used for brushing pageview for csdn 匯入相關爬蟲庫和解析xm...

python小爬蟲 爬小說(html

先挑個軟柿子捏捏吧,硬的現在還不行。就結合網頁html的各種標籤,爬取已在原始碼內的資訊。就觀察標籤的的特點,利用bs4中的beautifulsoup 進行獲取資訊。如下 import requests from bs4 import beautifulsoup 使用beautifulsoup 解析...