2

クロールする必要のあるクモがいくつかあります。デフォルト設定でscrapydを使用しています。私は、scrapyd インターフェイスを使用してジョブをスケジュールすることができました。この時点では、ジョブが終了していないことを除いて、すべて問題ありません。確認するたびに、scrapy をシャットダウンしない限り、16 (4 ジョブ / 4 cpus) のジョブが実行中であり、他のすべてのジョブが保留中であることがわかります。

ログも確認しましたが、次のように書かれています:

2013-09-22 12:20:55+0000 [spider1] INFO: Dumping Scrapy stats:
    {
     'downloader/exception_count': 1,
     'downloader/exception_type_count/scrapy.exceptions.IgnoreRequest': 1,
     'downloader/request_bytes': 244,
     'downloader/request_count': 1,
     'downloader/request_method_count/GET': 1,
     'downloader/response_bytes': 7886,
     'downloader/response_count': 1,
     'downloader/response_status_count/200': 1,
     'finish_reason': 'finished',
     'finish_time': datetime.datetime(2013, 9, 22, 12, 20, 55, 635611),
     'log_count/DEBUG': 7,
     'log_count/INFO': 3,
     'request_depth_max': 1,
     'response_received_count': 1,
     'scheduler/dequeued': 2,
     'scheduler/dequeued/memory': 2,
     'scheduler/enqueued': 2,
     'scheduler/enqueued/memory': 2,
     'start_time': datetime.datetime(2013, 9, 22, 12, 20, 55, 270275)}
2013-09-22 12:20:55+0000 [spider1] INFO: Spider closed (finished)

Scrapyd を使用して何百ものクモをどのようにスクレイピングしますか?

編集:

スクレイピー.cfg:

[settings]
default = myproject.scrapers.settings

[deploy]
url = http://localhost:6800/
project = myproject
version = GIT

[scrapyd]
eggs_dir    = scrapy_dir/eggs
logs_dir    = scrapy_dir/logs
items_dir   = scrapy_dir/items
dbs_dir     = scrapy_dir/dbs

スクレイピーの設定.py

import os
from django.conf import settings

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")

BOT_NAME = 'scrapers'

SPIDER_MODULES = ['myproject.scrapers.spiders']

DOWNLOADER_MIDDLEWARES = {
    'myproject.scrapers.middlewares.IgnoreDownloaderMiddleware': 50,
}

ITEM_PIPELINES = [
    'myproject.scrapers.pipelines.CheckPipeline',
    'myproject.scrapers.pipelines.CleanPipeline',
    'myproject.contrib.pipeline.images.ImagesPipeline',
    'myproject.scrapers.pipelines.SerializePipeline',
    'myproject.scrapers.pipelines.StatsCollectionPipeline',
]    

DOWNLOAD_DELAY = 0.25

path_to_phatomjs = '/home/user/workspace/phantomjs-1.9.1-linux-x86_64/bin/phantomjs'

IMAGES_STORE = settings.MEDIA_ROOT + '/' + settings.IMAGES_STORE
IMAGES_THUMBS = {
    'small': (70, 70),
    'big': (270, 270),
}
4

1 に答える 1

0

問題の原因がわかり次第、昨日この回答を投稿しようとしましたが、アカウントに問題が発生しました。

この問題は PhantomJs ドライバーに起因しており、scrapyd がジョブを終了するのを妨げていました。

最初は、削除機能を使用してドライバーを終了していました。

def __del__(self):
    self.driver.quit()
    ...

関数 quit_driver を作成し、それを Spider_closed シグナルにフックしました。

@classmethod
def from_crawler(cls, crawler):
    temp = cls(crawler.stats)
    crawler.signals.connect(temp.quit_driver, signal=signals.spider_closed)
    return temp
于 2013-09-24T16:03:02.120 に答える