python - 项目在 Python / Scrapy 中屈服时失去了名字
问题描述
在 Python 3.8.x 上的 Scrapy 2.4.x 中,我正在生成一个项目,目的是将一些统计信息保存到数据库中。刮板还有另一个项目也可以产生。
虽然项目的名称出现在主脚本“StatsItem”中,但它在其他类中丢失了。我使用项目的名称来决定调用哪个方法:
在 scraper.py 中:
import scrapy
from crawler.items import StatsItem, OtherItem
class demo(scrapy.Spider):
def parse_item(self, response):
stats = StatsItem()
stats['results'] = 10
yield stats
print(type(stats).__name__)
# Output: StatsItem
print(stats)
# Output: {'results': 10}
在管道.py
import scrapy
from crawler.items import StatsItem, OtherItem
class mysql_pipeline(object):
def process_item(self, item, spider):
print(type(item).__name__)
# Output: NoneType
if isinstance(item, StatsItem):
self.save_stats(item, spider)
elif isinstance(item, OtherItem):
# call other method
return item
第一个类中 print 的输出是“StatsItem”,而在管道中它是“NoneType”,因此方法 save_stats() 永远不会被调用。
我对 Python 很陌生,所以可能有更好的方法来做到这一点。我知道没有错误消息或异常。任何帮助是极大的赞赏。
解决方案
您不能yield
在函数 imo 之外使用。
推荐阅读
- sharepoint-2013 - 通过 Powershell 连接到外部 Sharepoint 本地站点
- python - 使用 Python 拆分数据并将排序数据分配到 excel 视图的列
- css - 在 2 行和 2 列中打破 4 个 div 响应
- extjs - 在 extjs 中定义商店与创建商店
- eclipse - Eclipse Photon - 错误的键盘布局仅适用于快捷方式
- gradle - 在特定项目中禁用 Gradle 守护进程
- c# - 分析项目:无法将修改保存到服务器。返回错误:'OLE DB 或 ODBC 错误:我们无法将值 null 转换为逻辑类型
- javascript - 能够在渲染 highcharts 后显示选中系列的标签
- jenkins - 可以使用 codeceptjs 看到 jenkins 的诱惑结果
- angular - 将 Web 组件中的 CustomEvent 发送到 Angular