0

一般的なクロールデータセット(warc.gzファイル)でHTMLコンテンツを解析する必要があります。私はbs4(Beautifulsoup)モジュールを使用することを決定しました。ほとんどの人がそれを提案しています。取得するためのコードスニペットがされて次のテキスト:一般的なクロールデータではBeautifullスープがテキスト抽出に時間がかかります

from bs4 import BeautifulSoup 

soup = BeautifulSoup(src, "lxml") 
[x.extract() for x in soup.findAll(['script', 'style'])] 
txt = soup.get_text().encode('utf8') 

bs4せずに、一つのファイルを完全に9分(テストケース)で処理されるが、私はテキストを解析するためにbs4を使用する場合は、仕事を約4時間で終了します。これは何が起こっている。 bs4以外の方法がありますか? 注:bs4はBeautifilsoupのような多くのモジュールを含むクラスです。

+0

あなたは 'BS4なし' とは何を意味していますか? –

+0

'bs4'よりも高速な' lxml'や 're'(正規表現)を使うことができます –

+0

html、script、stylesタグを削除できるlxmlやreの例はありますか? – Shafiq

答えて

1

ここで主要な時間を要するのは、リスト圧縮でタグを抽出することです。 lxmlとPythonの正規表現では、次のようにすることができます。 lxmlを使用して

import re 

script_pat = re.compile(r'<script.*?<\/script>') 

# to find all scripts tags 
script_pat.findall(src) 

# do your stuff 
print re.sub(script_pat, '', src) 

あなたはこのようにそれを行うことができます。

from lxml import html, tostring 
et = html.fromstring(src) 

# remove the tags 
[x.drop_tag() for x in et.xpath('//script')] 

# do your stuff 
print tostring(et) 
関連する問題