我試圖解析使用Python中Beautifulsoup 50 000網址。 的分析過程中循環:如何在Python中加速Beautifulsoup?
我弄清楚,時間解析一個頁面爲15 - 18秒。從頁面抓取20個元素。
爲什麼Beautifulsoup工作這麼慢?如何在Python中加速Beautifulsoup?
我試圖解析使用Python中Beautifulsoup 50 000網址。 的分析過程中循環:如何在Python中加速Beautifulsoup?
我弄清楚,時間解析一個頁面爲15 - 18秒。從頁面抓取20個元素。
爲什麼Beautifulsoup工作這麼慢?如何在Python中加速Beautifulsoup?
確保您瞭解您的瓶頸。
的第一個和主要問題不是HTML解析 - 這是「解析環路工程」。
這意味着代碼是同步/阻止 - 在您完成當前操作之前,您沒有處理下一個URL。這絕對是不可擴展。
爲了解決這個問題,切換到異步方式 - 切換到例如Scrapy
網絡抓取框架 - 這是當前縮放網絡抓取項目最自然的舉動。
另見:
並行化處理。
例如
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
你確定這個代碼爲Python 2.7? – Hamama
需要我只是把這個線程? 'q.put(beautifulSoupFunction(URL))'?或所有代碼如下:'title = soup.select('。document-title> .id-app-title')[0] .text'? – Hamama
我的意思是如何把這段代碼加入'Q':'soup = BeautifulSoup(content,'html.parser') web_site =「」 title = soup.select('。document-title> .id-app-標題')[0] .text' – Hamama
使用lxml的圖書館或用漂亮的LXML解析器 –