首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态添加域名到爬虫deny_domains列表

动态添加域名到爬虫deny_domains列表
EN

Stack Overflow用户
提问于 2012-05-19 01:17:36
回答 2查看 1.4K关注 0票数 1

我目前正在使用scrapy的CrawlSpider来查找多个start_urls列表中的特定信息。我想要做的是,一旦我找到了我想要的信息,就停止抓取一个特定的start_urls的域名,这样它就不会一直命中一个域名,而是直接命中另一个start_urls。

有没有办法做到这一点?我尝试过像这样附加到deny_domains:

代码语言:javascript
复制
deniedDomains = []
...
rules = [Rule(SgmlLinkExtractor(..., deny_domains=(etc), ...)]
...
def parseURL(self, response):
    ...
    self.deniedDomains.append(specificDomain)

追加似乎不会停止爬行,但如果我使用预期的specificDomain启动爬行器,那么它将按请求停止。所以我假设在爬虫启动后你不能改变deny_domains列表?

EN

回答 2

Stack Overflow用户

发布于 2012-10-19 07:37:02

要做到这一点,最好的方法是在爬行器类中维护自己的dynamic_deny_domain列表:

  • 编写一个简单的Downloader Middleware
  • 它是一个简单的类,只有一个方法实现:如果请求在<代码>D10列表中,则返回IgnoreRequest,否则返回<代码>D11。<代码>H212<代码>F213

然后将您的downloaderMiddleWare添加到Middleware list in scrapy settings,第一个位置是'myproject.downloadermiddleware.IgnoreDomainMiddleware': 50,

应该能行得通。

票数 1
EN

Stack Overflow用户

发布于 2012-07-05 01:41:21

有什么事吗?

代码语言:javascript
复制
from scrapy.contrib.spiders import CrawlSpider,Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor

class MySpider(CrawlSpider):
    name = "foo"
    allowed_domains = ["example.org"]
    start_urls = ["http://www.example.org/foo/",]

    rules = (
        Rule(SgmlLinkExtractor(
            allow=('/foo/[^/+]',),
            deny_domains=('example.com',)),
        callback='parseURL'),
        )

    def parseURL(self, response):

        # here the rest of your code
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10657006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档