[英]How to understand callback function in scrapy.Request?
我正在阅读 Web Scraping with Python 2nd Ed,并想使用 Scrapy 模块从网页中抓取信息。
我从文档中获得了以下信息: https://docs.scrapy.org/en/latest/topics/request-response.html
callback (callable) – function 将调用此请求的响应(一旦下载)作为其第一个参数。 有关更多信息,请参阅下面的将附加数据传递给回调函数。 如果请求没有指定回调,则将使用蜘蛛的 parse() 方法。 请注意,如果在处理过程中引发异常,则会调用 errback。
我的理解是:
传入 url 并像我们在请求模块中一样获得响应
resp = requests.get(url)
传入resp进行数据解析
解析(响应)
问题是:
class ArticleSpider(scrapy.Spider):
name='article'
def start_requests(self):
urls = [
'http://en.wikipedia.org/wiki/Python_'
'%28programming_language%29',
'https://en.wikipedia.org/wiki/Functional_programming',
'https://en.wikipedia.org/wiki/Monty_Python']
return [scrapy.Request(url=url, callback=self.parse) for url in urls]
def parse(self, response):
url = response.url
title = response.css('h1::text').extract_first()
print('URL is: {}'.format(url))
print('Title is: {}'.format(title))
您可以在此处找到有关self
的信息 - https://docs.python.org/3/tutorial/classes.html
关于这个问题:
can we extract URL from response parameter like this: url = response.url or should be url = self.url
您应该使用response.url
来获取您当前抓取/解析的页面的 URL
似乎您缺少一些与 python 类和 OOP 相关的概念。 阅读 python文档或至少阅读这个问题是个好主意。
下面是 Scrapy 的工作原理,您实例化一个请求 object 并将其交给 Scrapy 调度程序。
yield scrapy.Request(url=url) #or use return like you did
Scrapy 将处理请求,下载 html 并将它返回的所有请求返回给回调 function。 如果您没有在请求中设置回调 function (如我上面的示例),它将调用默认的 function 称为parse
。
Parse 是 object 的一种方法(又名函数)。 您在上面的代码中编写了它,即使您没有它仍然存在,因为您的 class 继承了它的父 class 的所有功能
class ArticleSpider(scrapy.Spider): # <<<<<<<< here
name='article'
所以一个TL; 您的问题博士:
1-您没有看到它,因为它发生在父 class 中。
2-你需要使用self.
所以 python 知道您正在引用蜘蛛实例的方法。
3- self
参数是它自己的实例,它被python使用。
4-Response 是一个独立的 object,您的 parse 方法作为参数接收,因此您可以访问它的属性,如response.url
或response.headers
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.