【问题标题】:Scrape all hostnames with scrapy用scrapy刮掉所有主机名
【发布时间】:2021-02-05 07:20:44
【问题描述】:

我注意到我试图抓取的一些网站将我重定向到不同的主机名:https://www.citibank.com.au/ 重定向到例如https://www1.citibank.com.au/。虽然 Scrapy 会抓取常规子域 (www.subdomain.example.com),但它会跳过 www2.example.com。

这显然是 Scrapy 应该如何工作的:https://doc.ebichu.cc/scrapy/ 那:

异地中间件 classescrapy.spidermiddlewares.offsite.OffsiteMiddleware 过滤掉 对蜘蛛所覆盖域之外的 URL 的请求。

这个中间件过滤掉所有主机名不在的请求 蜘蛛的 allowed_domains 属性。任何域的所有子域 在列表中也是允许的。例如。规则www.example.org 也将 允许 bob.www.example.org 但不允许 www2.example.com 或 example.com。

我的问题是:如何确保所有具有不同主机名(例如 www2.example.com)的子域都被抓取?

我能想到的解决方案是使用 URL 的所有变体(例如 [www.example.com、www1.example.com、www2.example.com 等])填充允许的域列表。这是要走的路,还是我在 Scrapy 文档中忽略的任何选项可以更好地解决这个问题?

【问题讨论】:

    标签: python web-scraping scrapy


    【解决方案1】:

    这是allowed_domains 应该在scrapy 中工作的方式。它旨在过滤来自您允许的域的任何异地请求。

    如果您希望您的scrapy 访问多个异地域,您不需要使用allowed_domains 属性,只需将其从您的蜘蛛中删除(或将其留空),请求就会得到通过。

    在您提到的特定情况下,如果它们都属于同一个域并且您在镜像 ("www1..." "www2...") 方面遇到问题,请仅使用实际域。

    allowed_domains = ['example.com']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-08
      • 1970-01-01
      • 2019-11-18
      相关资源
      最近更新 更多