Scrapy process_links和process_request的示例代码

Arr*_*row 5 python scrapy

我是Scrapy的新手,我希望有人能给我很好的示例代码,说明何时process_links和process_request最有用。我看到process_links用于过滤URL,但是我不知道如何编码。

谢谢。

Gra*_*rus 5

您的意思scrapy.spiders.Rule是最常用于scrapy.CrawlSpider

它们几乎完成了名称所说的内容,或者换句话说,在提取和处理/下载链接之间,它们充当了某种中间件的作用。

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

  1. 过滤掉一些您不喜欢的链接。
  2. 手动进行重定向以避免错误的请求。

例:

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
Run Code Online (Sandbox Code Playgroud)

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

  1. 修改标题(例如cookie)。
  2. 根据网址中的某些关键字更改诸如回调之类的详细信息。

例:

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
Run Code Online (Sandbox Code Playgroud)

您可能不会经常使用它们,但是在某些情况下,这两个是非常方便的快捷方式。