2012-09-14 61 views
5

我正在使用scrapy從多個不同的域並行下載頁面。我有數十萬頁的下載,所以表現很重要。如何提高scrapy的下載速度?

不幸的是,由於我介紹了scrapy的速度,我只得到了每秒幾頁。真的,平均每秒約2頁。我以前寫過我自己的多線程蜘蛛,每秒處理數百頁 - 我確信scrapy使用的扭曲等將會具有類似的魔力。

如何加快scrapy的速度?我非常喜歡這個框架,但是這個性能問題對我來說可能是一個破壞行爲。

以下是settings.py文件的相關部分。我錯過了一些重要的設置嗎?

LOG_ENABLED = False 
CONCURRENT_REQUESTS = 100 
CONCURRENT_REQUESTS_PER_IP = 8 

幾個參數:

  • 使用scrapy版本0.14
  • 該項目部署在EC2大的情況下,所以應該有足夠的內存,CPU和帶寬一起玩。
  • 我使用JSON協議調度爬網,在任何給定時間保持抓取程序已滿幾十個併發抓取。
  • 正如我剛開始所說的,我從很多站點下載頁面,所以遠程服務器性能和CONCURRENT_REQUESTS_PER_IP不應該是一個擔心。
  • 目前,我只做了很少的後處理。沒有xpath;沒有正則表達式;我只是爲每個頁面保存網址和一些基本統計數據。 (一旦我得到的基本性能扭結制定這將在以後更改。)
+0

Scrapy的確運行速度更快。它是CPU綁定還是顯示空閒?它從一開始就很慢,還是性能下降? –

+0

從一開始就很慢。 AWS顯示機器運行在100%的CPU,但我認爲這個扭曲的反應堆總是這樣做。該機器仍然敏捷,並且對SSH命令,新的HTTP請求等作出了響應。 – Abe

+1

在最後一個小時處理此問題,我有一個預感,問題在於用於scanneryd的服務配置文件。我已經開始了一個關於重新啓動scrapy守護進程的單獨問題:http://stackoverflow.com/questions/12428143/how-do-i-restart-the-scrapyd-daemon – Abe

回答

9

我在過去有過這個問題...... 和它很大一部分我用「髒」老棘手的解決。

Do a local cache DNS

大多數情況下,當你有這麼高的CPU使用率訪問同時的遠程站點,這是因爲scrapy正在試圖解決的URL。

請記住將主機上的dns設置(/etc/resolv.conf)更改爲LOCAL高速緩存DNS服務器。

在第一個將緩慢,但只要它開始緩存,它是更有效地解決你會看到巨大的改進。

我希望這會幫助你解決你的問題!

+0

偉大的答案! – KJW

+3

根據[scrapy doc](http://doc.scrapy.org/en/latest/topics/settings.html#dnscache-enabled),默認情況下,「DNSCACHE_ENABLED」爲「True」。 – AliBZ