php yield 递归,递归运行所有yield请求h的废弃输出文件

所以我有一只蜘蛛,如下所示:class CoursesSpider(scrapy.Spider):

name = "courses"

start_urls = [

'http://example.com'

]

def parse(self, response):

for subject in response.css('subject'):

subject_name = subject.css('subject::text').extract_first().strip()

subject_link = subject.css('subject::attr(href)').extract_first().strip()

subject_id = subject.css('subject::attr(id)').extract_first().strip()

if subject_link is not None:

subject_data = scrapy.Request(subject_link, callback=self.parse_course)

yield {

'subject_name': subject_name,

'subject_link': subject_link,

'subject_id': subject_id,

'subject_data': subject_data,

}

def parse_course(self, response):

subject_id = response.css('::attr(id)').extract_first().strip()

for course in response.css('course'):

course_name = course.css('course::text').extract_first().strip()

course_link = course.css('course::attr(href)').extract_first().strip()

course_id = course.css('course::attr(id)').extract_first().strip()

if course_link is not None:

course_data = scrapy.Request(course_link, callback=self.parse_class)

yield {

'course_name': course_name,

'course_link': course_link,

'course_id': subject_id + " " + course_id,

'course_data': course_data,

}

def parse_class(self, response):

course_id = response.css('::attr(id)').extract_first().strip()

for section in response.css('section'):

section_name = section.css('section::text').extract_first().strip()

section_link = section.css('section::attr(href)').extract_first().strip()

yield {

'section_name': section_name,

'section_link': section_link,

'course_id': course_id,

}

我想获得一个输出json文件,该文件具有树结构,如:

^{pr2}$

但是我只得到:

^{pr3}$

从我的理解来看,这是因为收益代码还没有被执行。我该怎么称呼一个“垃圾爬网课程-o”courses.json“这完全调用了所有请求?如果这不可能的话,我怎么能自己做?我可以稍后在python文件中导入json并运行吗http://example.com/southing>下面的呢?

我知道有很多代码,但应该澄清。

谢谢你的帮助!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值