htmlデータ抽出方法の比較

4815 ワード

Pythonでよく使われるhtmlデータの抽出方法は,正則,XPath,BeautifulSoupの3つである.このうち、最も一般的なXPathライブラリはlxmlです.今日はもう一つのライブラリSimplifiedDocを紹介し、彼らの優劣を比較してみましょう.1、インストール
名前
インストール方法
パッケージサイズ
説明
正則
インストール不要(内蔵)
lxml
pip install lxml
4.5MB
依存c言語ライブラリ
BeautifulSoup
pip install beautifulsoup4
107kB
サードパーティ製ライブラリを使用しない場合は、他のインストールは必要ありません.
SimplifiedDoc
pip install simplified-scrapy
43kB
第三者依存なし
2、Pythonバージョンのサポートこれらの方法は、Python 2とPython 3を同時にサポートしています.
3、使用方法正則とXPathの使用方法は、ここでは繰り返さず、BeautifulSoupとSimplifiedDocを簡単に比較するだけです.次のコードは,両者をインスタンス化し,データを抽出する方法を示している.
html = '''

  
    Example Domain
  
  
    
test text
''' # :http://www.jsphp.net/python/show-24-214-1.html 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) # :https://github.com/yiyedata/simplified-scrapy-demo/tree/master/doc_examples 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メソッドについて述べるが,各メソッドには3つのオプションパラメータstart=None,end=None,before=Noneがある.この3つのパラメータを使用すると、抽出する必要があるデータの位置決めを助けることができ、適切な場合、抽出を便利にすることができます.
4、性能比処理速度において、正則については処理速度が速く、かつ必要なデータのみを的確に処理するため、処理速度が最も速い方式が比較的公認されているが、使用するのは比較的困難である.以下ではlxml,BeautifulSoup,SimplifiedDocの3つの方式のみを比較する.比較コードは次のとおりです.
from lxml import etree
from bs4 import BeautifulSoup
from simplified_scrapy import SimplifiedDoc
import time
html = '''



  Example Domain
  
  
  
  


  

Example Domain

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は2番目、BeautifulSoupは3番目です.中には何が起こっているのか分からない奇妙な点がありますが、非デバッグモードではデバッグモードよりも速度が相対的に向上していますが、lxmlは遅くなります.5、まとめlxmlの期待に背かないスピードは正則以外で最も速く、小衆のSimplifiedDocはスピードが速く、使い方も簡単で、試してみる価値がある.
名前
インストールの難易度
使用の難しさ
スピード
パッケージサイズ
正則
なし(内蔵)
困難
最速
なし
lxml
一般
一般
速い
大きい
BeautifulSoup
単純
やさしい
遅い
より小さい
SimplifiedDoc
単純
やさしい
より速い
小さい