2016-12-21 6 views
-1

파이썬에서 Beautifulsoup를 사용하여 50,000 개의 URL을 구문 분석하려고했습니다. 구문 분석은 루프에서 작동합니다.Python에서 Beautifulsoup을 가속화하는 방법은 무엇입니까?

한 페이지를 구문 분석하는 시간은 15 - 18 초입니다. 페이지에서 나는 약 20 요소를 움켜 잡습니다.

Beautifulsoup이 왜 그렇게 느리게 작동합니까? Python에서 Beautifulsoup를 가속화하는 방법?

+0

사용 LXML 라이브러리 또는 파이썬 2.7이 코드는 그 확신의 아름다운 LXML 파서 –

답변

6

병목 현상을 이해했는지 확인하십시오.

첫 번째와 주된 문제는 HTML 구문 분석이 아닙니다. "구문 분석은 루프에서 작동합니다"입니다.

즉, 코드가 동기/차단임을 의미합니다. 현재 URL을 사용하여 완료 할 때까지 다음 URL을 처리하지 않습니다. 이것은 절대적으로 이며 확장 가능하지 않습니다.입니다.

이 문제를 해결하려면 비동기 방식으로 전환하십시오. 예를 들어 Scrapy 웹 스크래핑 프레임 워크로 전환하십시오. 현재 웹 스크래핑 프로젝트를 확장하는 가장 자연스러운 방법입니다.

또한 참조 :

1

처리를 병렬 처리하십시오.

import Queue 
import threading 

# will execute parrallel 
def taskProcess(q, url): 
    q.put(beautifulSoupFunction(url)) 

urls = ["http://url1.com", "http://url2.com"] 

q = Queue.Queue() 

for u in urls: 
    t = threading.Thread(target=taskProcess, args = (q,u)) 
    t.daemon = True 
    t.start() 

s = q.get() 
print s 
+0

을 사용할 수 있습니까? – Hamama

+0

그냥 스레드에 넣을 필요가 있습니까? 'q.put (beautifulSoupFunction (url))'? 또는 아래의 모든 코드는'title = soup.select ('. document-title> .id-app-title') [0] .text'? – Hamama

+0

이 코드를'Q '에 넣는 법을 뜻합니다 :'soup = BeautifulSoup (content,'html.parser ') web_site = "" title = soup.select ('. document-title> .id-app- 제목 ') [0]. 텍스트' – Hamama

관련 문제