【问题标题】:scrapy Request callback not working when dont_filter=False当 dont_filter=False 时,scrapy 请求回调不起作用
【发布时间】:2016-07-15 09:33:36
【问题描述】:

我正在使用 Scrapy 1.1.0 和 Python 3.5 从网站上抓取数据。 以下代码正在运行...

class ImdbSpider(scrapy.Spider):
    name = "imdbFav"
    allowed_domains = ["http://www.imdb.com"]
    start_urls = [
        "http://www.imdb.com/title/tt0203166/"
    ]
    recommendRegex = re.compile(r'\/title\/([A-Za-z0-9]*)')

    def parse(self, response):
        for recommend in response.xpath('//div[@class="rec_page"]/div[@class="rec_item"]/a/@href').extract():
            mo = self.recommendRegex.search(recommend)
            recommendId = mo.group(1)
            link = "http://www.imdb.com/title/" + recommendId
            print(link)
            yield scrapy.Request(link, callback=self.parse, dont_filter=True)
enter code here

但是...我不知道为什么如果 dont_filter=False 不调用请求回调。 文档说:

当您想要多次执行相同的请求时使用此选项,以忽略重复过滤器。小心使用它,否则你会陷入爬行循环。

但我请求的不是相同的网址。这里发生了什么?

感谢朋友们!

【问题讨论】:

  • 最后检查你的蜘蛛数据。你可能有一个非 0 offsite/filtered。您需要在allowed_domains 中使用域名,而不是 URL。所以使用allowed_domains = ["imdb.com"]
  • 你能发布你的日志吗?我刚刚尝试过,它工作正常,但是您的回调只是重定向到相同的解析方法,并且您几乎陷入无限递归,因为您在这里没有产生任何项目。我没有看到任何过滤的请求。
  • 嗨,保罗!你是对的,这只是允许的域!谢谢!

标签: python python-3.x web-scraping scrapy


【解决方案1】:

这是常见的朋友问题:

  • 格雷格和梅丽莎是朋友
  • 梅丽莎和约翰是朋友
  • 约翰和杰克是朋友
  • 杰克和格雷格是朋友

在你的情况下是关于电影的:

  • 在一起表明我们是最好的
  • 我们是最好的建议 Show me love
  • Show me loveSuggest Together

当您在寻找建议时,肯定会在电影中重复几次。最好的方法是将电影数据保存到数据库中,并通过其 id 给出建议。

【讨论】:

    猜你喜欢
    • 2016-11-21
    • 2013-06-01
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-23
    • 1970-01-01
    相关资源
    最近更新 更多