首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何理解scrapy.Request中的回调函数?

如何理解scrapy.Request中的回调函数?
EN

Stack Overflow用户
提问于 2020-07-04 17:06:03
回答 2查看 866关注 0票数 0

我正在使用Python第二版阅读Web抓取,并希望使用Scrapy模块从网页中抓取信息。

我从文档中获得以下信息:https://docs.scrapy.org/en/latest/topics/request-response.html

回调(可调用)-该函数将以该请求的响应(一旦下载)作为其第一个参数来调用。有关更多信息,请参见将其他数据传递给下面的回调函数。如果请求没有指定回调,那么将使用蜘蛛的parse()方法。注意,如果在处理过程中引发异常,则将调用errback。

我的理解是:

  1. 传入url并重新定位,就像在请求模块中一样。 resp = requests.get(url)
  2. 传递用于数据解析的resp 解析(Resp)

问题是:

  1. 我没看到resp是从哪里传入的
  2. 为什么需要在参数中解析之前添加self关键字?
  3. self关键字从未用于解析函数,为什么麻烦将其作为第一个参数?
  4. 我们能否从响应参数中提取url : url = response.url,或者应该是url = self.url
代码语言:javascript
运行
复制
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))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-04 19:34:14

似乎您缺少了一些与python类和OOP相关的概念。在python 文档或至少这个问题中读一读是个好主意。

以下是Scrapy的工作原理,您实例化了一个请求对象,并将其交给Scheduler。

代码语言:javascript
运行
复制
yield scrapy.Request(url=url) #or use return like you did

Scrapy将处理请求,下载html,并将它得到的所有请求返回给回调函数。如果您没有在请求中设置回调函数(如上面的示例所示),它将调用名为parse的默认函数。

解析是对象的一个方法(即.一个函数)。您在上面的代码中编写了它,即使没有,它仍然存在,因为您的类继承了它的父类的所有函数

代码语言:javascript
运行
复制
class ArticleSpider(scrapy.Spider): # <<<<<<<< here
    name='article'

所以你问题的答案是:

你没看到是因为它发生在家长课上。

2-您需要使用self.,以便python知道您引用的是蜘蛛实例的方法。

3- self参数是它self的实例,它被python使用。

响应是解析方法作为参数接收的独立对象,因此可以访问它的属性,如response.urlresponse.headers

票数 0
EN

Stack Overflow用户

发布于 2020-07-04 19:31:19

有关self的信息,您可以在这里找到- https://docs.python.org/3/tutorial/classes.html

关于这个问题:

代码语言:javascript
运行
复制
can we extract URL from response parameter like this: url = response.url or should be url = self.url

您应该使用response.url获取当前爬行/解析的页面的URL

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62732038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档