Scrapy 刮痧';s sitemapcrawler在爬网之前处理链接

Scrapy 刮痧';s sitemapcrawler在爬网之前处理链接,scrapy,Scrapy,是否可以将规则与sitemapcrawler一起使用?有些站点的旧站点地图使用http链接而不是https。每次我抓取它们时,所有链接都会被重定向(301),这将在它们(和我)这一边产生无用的流量。我认为最简单的解决方案是在链接被爬网之前对其进行处理,并将方案从http更改为https 我可以用规则来做吗?还是应该使用默认的中间件,让它基本上解析所有URL两次?忽略重定向可能是一个解决方案,但我发现它“更脏”。Scrapy sitemapcrawler具有规则属性 见: 您可以添加将过滤非ht

是否可以将规则与sitemapcrawler一起使用?有些站点的旧站点地图使用http链接而不是https。每次我抓取它们时,所有链接都会被重定向(301),这将在它们(和我)这一边产生无用的流量。我认为最简单的解决方案是在链接被爬网之前对其进行处理,并将方案从http更改为https


我可以用规则来做吗?还是应该使用默认的中间件,让它基本上解析所有URL两次?忽略重定向可能是一个解决方案,但我发现它“更脏”。

Scrapy sitemapcrawler具有规则属性

见:


您可以添加将过滤非https URL的regexp。

您可以尝试覆盖SitemapSpider的站点地图,检查SitemapSpider中的实现,示例如下:

def _parse_sitemap(self, response):
    sitemap_generator = super(MySitemapSpider, self)._parse_sitemap(response)
    if sitemap_generator is None:
        return

    for response_url in sitemap_generator:
        import pdb;pdb.set_trace()
        # do something with the URL
        yield response_url

事实上,我不确定规则是我需要的。我认为他们是在下载了网页后才应用的,这不是我需要的。我有一个案例,即爬网的网站地图包括其他网站地图。我使用“sitemap\u follow”regexp来定义应该遵循哪些sitemaps URL,并结合“sitemap\u rules”regexp来指定只遵循哪些链接。运行爬虫程序按预期工作,我的爬虫程序仅在指定的URL之后运行,该URL包含我的目标数据。您确定在爬虫之前应用了sitemap_规则吗?我以为你只能放弃你不想要的,而不能真正做到我所期望的。我应该尝试一下maybeOk,在检查了更多的文档和SitemapSpider的实现之后,我只看到了两个解决方案。您可以在自己的站点地图上使用XMLFeedSpider并进行解析,或者覆盖函数_parse_sitemap(self,response),处理生成的响应对象,并从http更改为https查看我的另一个答案