如何優化 Python 爬蟲的速度?

時間 2021-05-30 07:30:34

1樓:

我之前弄過分布式爬蟲,爬取速度和你的機器數量成正比。

整體架構如下:

scrapy 從訊息佇列rabbitmq裡獲取起始url,然後處理後的訊息儲存到mongodb裡。

然後通過docker批量部署映象到不同的機器。

scrapy有致命缺點,就是源站響應很慢的化,大部分cpu會閒置,這樣你即使把併發設定的很大也沒什麼用。

2樓:miziaiba

將網速跑滿,將需要計算的任務分配給程序池

至於如何將網速跑滿,可以選擇多執行緒,也可以用協程,哪個方便用哪個

然後......最好找個網速夠高的環境

3樓:

對於cpu密集型建議別用python多執行緒不要忘了cpython的global interperater lock 不過你這個情況io應該是瓶頸,建議使用epoll等非同步io

4樓:gygigi khgjkbj

openshift上面跑gevent爬1024也就分分鐘的事情……

話說我為什麼只開了20個協程呢【嚴肅臉】

哦對了1024會短時間封IP,用同乙個cookie爬就沒事了

5樓:謝科-搜尋引擎

考慮用多程序+分布在不同機房的集群。

理由如下:

如果單程序,則瓶頸多出在CPU上。

多程序的話可以高效利用CPU。但是其實多數情況是在網路,所以說更好的解決辦法是用多個機房的多台機器同時跑多程序的爬蟲,這樣減少網路阻塞。

實現的話,用scrapy+rq-queue然後用redis來作佇列就好。

用這個方法爬過douban的幾千萬個頁面

請參考我在另乙個問題裡的回答:

Python 爬蟲如何入門學習?

6樓:yishen chen

很多人提到了grequests(gevent + requests) 但是這東西在2000多個請求之後就崩潰了。(OSerror: Too many open files).

推薦用frequests,grequests同樣的API,但是更加穩定。

i-trofimtschuk/frequests 路 GitHub

7樓:什麼都不是

先用簡單的多執行緒模型改造一下,基本能夠可用的數量級,我就是這樣弄的。小檔案100threads,100qps是沒問題的,基本達到網路IO的極限。

在網上的話,建議自己根據業務性質調整

8樓:

用 Asynccore 之類手寫。看看 Twisted 有沒有非阻塞、非同步的 HTTP client 框架。

用過 multiprocessing 包 + utllib 做 http client 速度相當不理想,執行緒應該會好但我的直覺是提公升有限。

----

推薦 gevent + grequests

python爬蟲的中文亂碼問題?

Hawk 看了其他答案,講了一堆原理,最後還得自己手動去尋找,太費勁,最後找到了乙個自動的方案 自動從meta中識別charset,自動轉碼 無用的廢柴 對於Python中文亂碼的問題,之前用的Python2.7版本,也能夠解決中文亂碼的問題,但是太麻煩啊,但是後來改成了Python3.5版本,就解...

談談對Python爬蟲的理解

雲裡霧裡 如果喜歡乙個人,就得喜歡和包容她的一切,包括她和男生的正常來往。如果做不到,並不停的為此產生矛盾,那麼最終就是把天聊死了!你這是不自信的結果,既然對方和你已經確定了關係,那麼你還是有吸引力的!所以只要對方不出格,你應當包容。並你提高自己的自信。 西樘 先占個坑,出差坐了幾個小時高鐵剛下車又...

你是如何開始能寫 Python 爬蟲?

猛獸程式開發 學習Python課程可以讓我們獲得更加滿意的工作,現在Python幾乎成為了很多崗位不能缺少的技能,現在對於大眾來說,參加Python大部分都需要兩萬塊左右,所以不少人都想要學習Python,那麼0基礎自學Python大概多長時間?如果是自學的話,從零基礎開始學習Python的話,根據...