2017-03-08 49 views
1
from urllib import request 
import urllib 
from bs4 import BeautifulSoup as bs 

page = request.urlopen("http://someurl.ulr").read() 
soup = (page,"lxml") 

現在這個過程是非常緩慢的,因爲它使一個請求解析數據, 經過指定的步驟,然後我們回到發出請求。網頁抓取同時要求

- for example 



for links in findAll('a'): 
    print (links.href) 

然後我們又回到提出請求,因爲我們想要刮另一個URL,如何加速這個過程?

我應該將URL的整個源代碼存儲在一個文件中,然後執行必要的操作(解析,查找我們需要的數據)---?

我有這個想法,因爲從一個DoS(拒絕服務)腳本 使用導入襪子和線程進行大量的請求。

注意:這只是一個想法, 有沒有一種更有效的方法呢?

+0

是的,使用['scrapy'](https://scrapy.org) – eLRuLL

+0

不,我愛我的湯,我會找到一種方式不會讓我失望。 –

+0

你可以使用'scrapy'的湯。 Scrapy只向表中添加異步請求。 – eLRuLL

回答

2

這個最有效的方法很可能是使用asyncio,並在一個點產生儘可能多的python進程,因爲你有線程。

asyncio documentation

,並打電話給你的腳本這樣的:

for i in $(seq $(nproc)); do python yourscript.py $entry; done 

這將導致一個巨大的速度提升。爲了進一步提高處理速度,您可以使用正則表達式解析器而不是Beautifulsoup,這使我的加速速度提高了大約5倍。

您也可以使用專門的庫來完成此任務,例如scrapy

+0

嗯,這非常有用,我會更多地瞭解這一點。 我知道我不能只產生同一事物的許多實例,因爲它會做同樣的事情,並感謝你,eLRuLL只是指着我scrapy會看看我如何整合這一點。 我還有一個問題給你, 如果我試圖抓舉例子,你會推薦什麼樣的解決方案來繞過bot安全(不包括代理和時間延遲),我非常感謝幫助! –

+0

高度依賴於機器人安全實施。如果不知道這一點,我無法給你任何建議。在方法將運行在這些bot安全的東西,並解決它們。 – Sekuraz