在发送之前修改 url 以在 scrapy 中获取

Alo*_*hor 5 python scrapy scrapy-spider

我想解析站点地图并从站点地图中找出所有网址,然后在所有网址中附加一些单词,然后我想检查所有修改后的网址的响应代码。

对于这个任务,我决定使用scrapy,因为它可以很方便地抓取站点地图。它在 Scarpy 的文档中给出

在这个文档的帮助下,我创建了我的蜘蛛。但我想在发送获取之前更改网址。所以为此我试图从这个链接中获得帮助。这个链接建议我使用rules和实施process_requests()。但我无法利用这些。我有点累了,我已经发表了评论。任何人都可以帮助我为注释行编写确切的代码或以任何其他方式在scrapy中完成此任务吗?

from scrapy.contrib.spiders import SitemapSpider
class MySpider(SitemapSpider):
    sitemap_urls = ['http://www.example.com/sitemap.xml']
    #sitemap_rules = [some_rules, process_request='process_request')]

    #def process_request(self, request, spider):
    #   modified_url=orginal_url_from_sitemap + 'myword'
    #   return request.replace(url = modified_url)        

    def parse(self, response):
        print response.status, response.url  
Run Code Online (Sandbox Code Playgroud)

小智 2

您可以将 request_scheduled 信号附加到函数并在函数中执行您想要的操作。例如

class MySpider(SitemapSpider):

    @classmethod
    def from_crawler(cls, crawler):
        spider = cls()
        crawler.signals.connect(spider.request_scheduled, signals.request_scheduled)

    def request_scheduled(self, request, spider):
        modified_url = orginal_url_from_sitemap + 'myword'
        request.url = modified_url
Run Code Online (Sandbox Code Playgroud)