我目前正在使用scrapy的CrawlSpider来查找多个start_urls列表中的特定信息。我想要做的是,一旦我找到了我想要的信息,就停止抓取一个特定的start_urls的域名,这样它就不会一直命中一个域名,而是直接命中另一个start_urls。
有没有办法做到这一点?我尝试过像这样附加到deny_domains:
deniedDomains = []
...
rules = [Rule(SgmlLinkExtractor(..., deny_domains=(etc), ...)]
...
def parseURL(self, response):
...
self.deniedDomains.append(specificDomain)追加似乎不会停止爬行,但如果我使用预期的specificDomain启动爬行器,那么它将按请求停止。所以我假设在爬虫启动后你不能改变deny_domains列表?
发布于 2012-10-19 07:37:02
要做到这一点,最好的方法是在爬行器类中维护自己的dynamic_deny_domain列表:
然后将您的downloaderMiddleWare添加到Middleware list in scrapy settings,第一个位置是'myproject.downloadermiddleware.IgnoreDomainMiddleware': 50,
应该能行得通。
发布于 2012-07-05 01:41:21
有什么事吗?
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 codehttps://stackoverflow.com/questions/10657006
复制相似问题