2016-12-21 55 views
-1

我試圖解析使用Python中Beautifulsoup 50 000網址。 的分析過程中循環:如何在Python中加速Beautifulsoup?

我弄清楚,時間解析一個頁面爲15 - 18秒。從頁面抓取20個元素。

爲什麼Beautifulsoup工作這麼慢?如何在Python中加速Beautifulsoup?

+0

使用lxml的圖書館或用漂亮的LXML解析器 –

回答

6

確保您瞭解您的瓶頸。

的第一個和主要問題不是HTML解析 - 這是「解析環路工程」。

這意味着代碼是同步/阻止 - 在您完成當前操作之前,您沒有處理下一個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

你確定這個代碼爲Python 2.7? – 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] .text' – Hamama