scrapy中无法调用函数

技术型人才2号 2018-05-21 11:41:28
刚学的scrapy,现在遇到了这个问题很困扰我,情况是这样的,这是我的程序从parse进入之后调用了next_one函数,然后进入next_one之后发起formrequest请求,结果回调入next_two,进入next_two之后再调用next_three函数,但是这个时候就是进入不了next_three函数,debug也进入不了,而这时候改用request请求页面,再debug,这时候就能够进入next_three函数之中了,这是怎么回事,formrequest跟request同样是异步回调,为什么一个可以完成回调,一个不可以所以我的问题有一下几个 1、为什么在parse中调用函数还需要用yield,需要交给scrapy处理什么吗
2、为什么同样的程序request可以进入到第四个函数,而formrequest进入不了
3、到底scrapy中应该如何正确调用普通函数,如在parse中正确调用其他普通函数 麻烦各位大哥救救我。
...全文
1498 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xjr7670 2019-11-21
  • 打赏
  • 举报
回复
引用 5 楼 雪梅长青 的回复:
其实可以调用,是我弄错了
果然是这样,真是神奇了。难道必须要有返回?调用的地方必须要去接收返回才能成功调用吗
一叶知秋境 2019-09-19
  • 打赏
  • 举报
回复
其实可以调用,是我弄错了
coderkkk 2019-09-19
  • 打赏
  • 举报
回复
我也遇到这个问题,无法直接调用spider内部函数。 我的解决方法是: 把需要抽出来的方法放在spider外部,即可通过函数方式调用。直接定义函数或者使用class都可以。 但外部函数无法直接使用yield 返回item。先return 得到数据,再在spider 内部使用yield即可。

...
class MySpider(scrapy.Spider):
    def parse(self, response):
        ...
        yield base.info(response)
        ...
class Base:
    def info(self, response):
        ...
        myitem = MyItem()
        ...
        return myitem
引用 3 楼 雪梅长青 的回复:
只能使用yield来调用函数,不知道为什么。。。
yield 在spider内部只能适用 Request、item、dict 等等,错误使用 有报错提示。
一叶知秋境 2019-07-12
  • 打赏
  • 举报
回复
只能使用yield来调用函数,不知道为什么。。。
  • 打赏
  • 举报
回复

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧