我是Scrapy的新手,我希望有人能给我很好的示例代码,说明何时process_links和process_request最有用。我看到process_links用于过滤URL,但是我不知道如何编码。
谢谢。
您的意思scrapy.spiders.Rule是最常用于scrapy.CrawlSpider
它们几乎完成了名称所说的内容,或者换句话说,在提取和处理/下载链接之间,它们充当了某种中间件的作用。
process_links在链接提取并转换为请求时位于之间。有很酷的用例,仅举几个常见的用例:
例:
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但实际上可以做一些其他很酷的事情,例如:
例:
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)
您可能不会经常使用它们,但是在某些情况下,这两个是非常方便的快捷方式。