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하지 않고, 하나 개의 파일이 완전히 구분 (테스트 케이스)에서 처리하지만 텍스트를 구문 분석 bs4를 사용하는 경우, 작업은 약 4 시간으로 완성되고 있습니다. 이게 무슨 일이야. bs4 이외의 다른 솔루션이 있습니까? 주 : bs4는 Beautifilsoup와 같은 많은 모듈을 포함하는 클래스입니다.

+0

당신이 무엇을 의미합니까 'BS4없이'? –

+0

'bs4'보다 더 빠를'lxml' 또는're' (정규식)을 사용할 수 있습니다 –

+0

html, script, styles 태그를 제거 할 수있는 lxml이나 re에 대한 예제가 있습니까? – Shafiq

답변

1

여기서 주요 시간 소모적 인 부분은 목록 압축에서 태그를 추출하는 것입니다. 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) 

이 같은 그것을 할 수 lxml 사용 :

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)