2

ランディング ページ (index.html または同等のページ) をダウンロードしたい Web サイトのかなり長いリストがあります。私は現在、Scrapy を使用しています (その背後にいる人たちへの愛が溢れています。これは素晴らしいフレームワークです)。Scrapy は、この特定のタスクで私が望むよりも遅く、タスクがどれほど単純であるかを考えると、wget または他の代替手段がより高速になるかどうか疑問に思っています。何か案は?

(これが私が Scrapy で行っていることです。このタスクのために Scrapy を最適化するためにできることはありますか?)

だから、私は次のような開始URLリストを持っています

start_urls=[google.com yahoo.com aol.com]

そして、各応答からテキストをスクレイピングし、これを xml に保存します。複数のドメインを許可するには、オフサイトミドルウェアを無効にする必要があります。

Scrapy は期待どおりに動作しますが、遅いようです (1 時間に約 1000 または 4 秒ごとに 1)。単一のスパイダーの実行中に CONCURRENT_REQUESTS_PER_SPIDER の数を増やすことでこれを高速化する方法はありますか? 他に何か?

4

1 に答える 1

4

Pythonで複数のサイトを同時にダウンロードする方法が必要な場合は、次のような標準ライブラリを使用してダウンロードできます。

import threading
import urllib

maxthreads = 4

sites = ['google.com', 'yahoo.com', ] # etc.

class Download(threading.Thread):
   def run (self):
       global sites
       while sites:
           site = sites.pop()
           print "start", site
           urllib.urlretrieve('http://' + site, site)
           print "end  ", site

for x in xrange(min(maxthreads, len(sites))):
    Download().start()

の代わりに、チェックアウトするhttplib2PycURL、ダウンロードを実行することもできますurllib

xmlとしてスクレイプされたテキストをどのように表示するかは正確にはわかりませんがxml.etree.ElementTree、標準ライブラリから使用することも、インストールすることもできますBeautifulSoup(不正な形式のマークアップを処理するため、より適切です)。

于 2010-08-08T01:42:34.227 に答える