【问题标题】:Scrapy DEPTH_PRIORITY don't workScrapy DEPTH_PRIORITY 不起作用
【发布时间】:2016-03-17 14:52:49
【问题描述】:

我希望我的 Spider 在更深入地关注这些网站之前完全爬取 start_urls 网站。

爬虫旨在查找过期域。

例如,我创建了一个包含 500 个 url(450 个过期网站和 50 个活动网站)的页面,爬虫必须在跟随之前将每个 url 插入数据库。

实际上爬虫会跟随第一个活着的网站并停止爬取start_urls网站。

这是我的配置:

self.custom_settings = {
    'RETRY_ENABLED': False,
    'DEPTH_LIMIT' : 0,
    'DEPTH_PRIORITY' : 1,
    'CONCURRENT_REQUESTS_PER_DOMAIN' : 64,
    'CONCURRENT_REQUESTS' : 128,
    'REACTOR_THREADPOOL_MAXSIZE' : 30,
}

设置:

SCHEDULER_DISK_QUEUE = 'scrapy.squeues.PickleFifoDiskQueue'
SCHEDULER_MEMORY_QUEUE = 'scrapy.squeues.FifoMemoryQueue'
LOG_LEVEL = 'INFO'
DUPEFILTER_CLASS = 'dirbot.custom_filters.BLOOMDupeFilter'

爬虫:

rules = (
    Rule(LxmlLinkExtractor(allow=('.com', '.fr', '.net', '.org', '.info', '.casino', '.co'),
        deny=('facebook', 'amazon', 'wordpress', 'blogspot', 'free')),
        callback='parse_obj',
        process_request='add_errback',
        follow=True),
)

def add_errback(self, request):
    return request.replace(errback=self.errback_httpbin)

def errback_httpbin(self, failure):
    if failure.check(DNSLookupError):
        request = failure.request
        ext = tldextract.extract(request.url)
        domain = ext.registered_domain
        if domain != '' :
            self.checkDomain(domain)

【问题讨论】:

  • 如果在settings.py 文件中指定设置会发生什么?只是为了测试,我认为custom_settings需要是一个类属性,请确认直接在settings.py上分配。
  • 你想把 custom_settings 放在 settings.py 上吗?我认为当我的蜘蛛启动时我的 custom_settings 已经被读取。
  • 你说得对!我已经更改了 self.custom_settings 的位置,现在一切正常。
  • 希望对我有所帮助,然后我会添加答案

标签: python web-scraping scrapy scrapyd


【解决方案1】:

custom_settings 需要定义为类属性,以替换settings.py 上的实际设置。

【讨论】:

  • 你知道为什么蜘蛛在第一页之后不再继续爬取吗?爬虫停止 DEPH LIMIT : 0
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-04
  • 2013-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-18
相关资源
最近更新 更多