python - 为什么我不能在 Scrapy 中使用多个 yield 请求?
问题描述
我对 Scrapy 很陌生,只是想知道为什么我不能使用多个 yield 语句?
import scrapy
class CourseSpider(scrapy.Spider):
name = 'course'
start_urls = ['link.example']
def parse(self, response):
syllabus = response.css('div#course_syllabus')
title = response.css('title::text').get()
image = syllabus.css('img::attr(src)').get()
image_desc = syllabus.css('p::text')[1].get()
desc = syllabus.css('p::text')[10].get()
for i in (title, image, image_desc):
yield {'course' : i}
yield {'course_overview' : desc}
因此,当输出到 CSV 文件时,我得到了带有标题、图像和 image_desc 值的“课程”列,但是它根本没有将“课程概览”列添加到 csv 中。我只需要 1 个值,所以没有将它包含在 for 循环中。有人能帮我吗?谢谢。
解决方案
多个管道可能有多个收益,但在这里您尝试将所有收益添加到 1 个收益中。如果你在 for 循环中只有一个项目,并且你想再添加 1 个列调用“course_overview”,你可以像这样使用 yield:
import scrapy
class CourseSpider(scrapy.Spider):
name = 'course'
start_urls = ['link.example']
def parse(self, response):
syllabus = response.css('div#course_syllabus')
title = response.css('title::text').get()
image = syllabus.css('img::attr(src)').get()
image_desc = syllabus.css('p::text')[1].get()
desc = syllabus.css('p::text')[10].get()
item = scrapy.Item()
for i in (title, image, image_desc):
item['course'] = i
item['course_overview'] = desc
yield item
您可以使用scrapy item 处理多个列,而不是双倍产量。
推荐阅读
- docker - Dockerfile 中的条件复制
- javascript - 在 Facebook 的 Chrome 扩展中禁用页面可见性 API
- javascript - Ajax 不在标签中显示数据
- python-3.x - 在 Nvidia Jetson Nano 中播放视频的 Python 代码
- android - 如何使回调流主要安全?
- ios - UITableViewCell 中的 UICollectionView。捕捉滚动事件
- flutter - 空安全包抛出错误:“无法以健全的空安全运行”
- css - bootstrap 5,带指示器的标签
- javascript - Typescript / Angular 12:访问嵌套布尔/枚举权限的结构
- c++ - 如何使用 Visual Studio Code 从 Visual Studio 2019 构建、调试和运行现有的 C++ 解决方案 (.sln)?