了解Scrapy中的回调

帕拉格

我是Python和Scrapy的新手。我以前没有使用过回调函数。但是,我现在为下面的代码做。将执行第一个请求,并将其响应发送到定义为第二个参数的回调函数:

def parse_page1(self, response):
    item = MyItem()
    item['main_url'] = response.url
    request = Request("http://www.example.com/some_page.html",
                      callback=self.parse_page2)
    request.meta['item'] = item
    return request

def parse_page2(self, response):
    item = response.meta['item']
    item['other_url'] = response.url
    return item

我无法理解以下内容:

  1. item人口如何
  2. 请问request.meta该行之前执行response.meta的线parse_page2
  3. 返回itemparse_page2去哪儿了?
  4. 中的return request语句需要什么parse_page1我认为提取的物品需要从这里退回。
Warvariuc

阅读文档

对于蜘蛛,抓取周期经历如下过程:

  1. 首先,生成初始请求以爬网第一个URL,然后指定要调用的回调函数,并从这些请求中下载响应。

    要执行的第一个请求是通过调用start_requests()(默认情况下)Request方法中指定的URL生成start_urlsparse方法以及作为请求的回调函数方法而获得的。

  2. 在回调函数中,您解析响应(网页)并返回Item对象,Request对象或两者的迭代。这些请求还将包含一个回调(可能相同),然后由Scrapy下载,然后由指定的回调处理它们的响应。

  3. 在回调函数中,通常使用选择器(但是也可以使用BeautifulSoup,lxml或您喜欢的任何机制)来解析页面内容,并使用已解析的数据生成项目。

  4. 最后,通常将从蜘蛛返回的项目保存到数据库(在某些项目管道中)或使用Feed导出写入文件

答案:

'item'request.meta行在response.meta第in行之前如何执行parse_page2

蜘蛛由Scrapy引擎管理。它首先从中指定的URL发出请求,start_urls然后将其传递给下载器。下载完成后,将调用请求中指定的回调。如果回调返回另一个请求,则重复同样的事情。如果回调返回Item,则该项目将传递到管道以保存抓取的数据。

退回的物品parse_page2去哪儿了?

有什么需要return request陈述的parse_page1我认为提取的物品需要从这里退回吗?

如文档中所述,每个回调(parse_page1parse_page2)都可以返回aRequest或an Item(或它们的可迭代)。parse_page1返回Request不是Item,因为需要从其他URL刮除其他信息。第二个回调parse_page2返回一个项目,因为所有信息都已被抓取并准备好传递到管道。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

了解Express中的回调

来自分类Dev

了解NodeJS中的回调

来自分类Dev

scrapy:了解项目和请求在回调之间如何工作

来自分类Dev

了解 NodeJS 中的回调函数

来自分类Dev

了解异步回调

来自分类Dev

了解匿名函数中的参数(回调示例)

来自分类Dev

了解JavaScript中的术语iteratee,回调,函数工厂

来自分类Dev

了解匿名函数中的参数(回调示例)

来自分类Dev

想了解javascript中回调函数的需求

来自分类Dev

了解带参数的回调

来自分类Dev

了解回调函数jQuery

来自分类Dev

使用简单示例了解Javascript回调

来自分类Dev

了解异步:异步与同步回调

来自分类Dev

了解Promise.Resolve与常规回调

来自分类Dev

了解node.js回调2.0

来自分类Dev

回调中的 Nodejs Mysql 回调

来自分类Dev

了解React的钩子useEffect函数。何时调用useffect中的回调函数(即取消订阅)?

来自分类Dev

Scrapy Selenium无法进行Request()回调

来自分类Dev

Scrapy请求回调不触发

来自分类Dev

重定向请求的回调Scrapy

来自分类Dev

scrapy:信号调用产生的回调请求

来自分类Dev

Python Scrapy SitemapSpider回调未被调用

来自分类Dev

未执行回调的 Scrapy 请求

来自分类Dev

Android中的回调

来自分类Dev

回调中的循环

来自分类Dev

了解JavaScript闭包-冻结变量传递给回调

来自分类Dev

使用jQuery Isotope了解setTimeout()和回调

来自分类Dev

使用Node.js更好地了解回调

来自分类Dev

了解JavaScript闭包-冻结变量传递给回调