Scrapy process_links和process_request的示例代码

时间:2016-07-15 15:58:32

标签: python scrapy

我是Scrapy的新手,我希望有人能给我一些关于process_links和process_request最有用的好示例代码。我发现process_links用于过滤网址,但我不知道如何对其进行编码。

谢谢。

1 个答案:

答案 0 :(得分:4)

您的意思是scrapy.spiders.Rule

中最常用的scrapy.CrawlSpider

他们几乎完全按照名称所说的,或者换句话说,在提取和处理/下载链接之间充当中间件。

process_links介于提取链接并转换为请求之间。这里有很酷的用例,仅举几个常见的用例:

  1. 过滤掉一些你不喜欢的链接。
  2. 手动重定向以避免错误请求。
  3. 示例:

    def process_links(self, link):
        for link in links:
            #1
            if 'foo' in link.text:
                continue  # skip all links that have "foo" in their text
            yield link 
            #2
            link.url = link.url + '/'  # fix url to avoid unnecessary redirection
            yield link
    

    process_requests位于刚刚发出的请求和下载之前。它与process_links共享一些用例,但实际上可以做一些其他很酷的东西,如:

    1. 修改标题(例如Cookie)。
    2. 根据网址中的某些关键字更改回调等详细信息。
    3. 示例:

      def process_req(self, req):
          # 1
          req = req.replace(headers={'Cookie':'foobar'})
          return req
          # 2
          if 'foo' in req.url:
              return req.replace(callback=self.parse_foo)
          elif 'bar' in req.url:
              return req.replace(callback=self.parse_bar)
          return req
      

      你可能不会经常使用它们,但在某些情况下这两种方法可以非常方便和简单。