Scrapy 刮擦管道装载,但不';行不通
我有一个粗糙的项目,它加载管道,但不将项目传递给管道。感谢您的帮助 spider的精简版:Scrapy 刮擦管道装载,但不';行不通,scrapy,pipeline,Scrapy,Pipeline,我有一个粗糙的项目,它加载管道,但不将项目传递给管道。感谢您的帮助 spider的精简版: #导入 类MySpider(爬行蜘蛛): #规则和东西 def解析_项(自身、响应): ''获取HTML响应并将其转换为一个可供数据库使用的项目。我希望如此。 ''' #很多代码 退货项目 此时,打印出项目会产生预期的结果,settings.py非常简单: ITEM\u管道=[ 'mySpider.pipelines.MySpiderPipeline', “mySpider.pipelines.Pipe
#导入
类MySpider(爬行蜘蛛):
#规则和东西
def解析_项(自身、响应):
''获取HTML响应并将其转换为一个可供数据库使用的项目。我希望如此。
'''
#很多代码
退货项目
此时,打印出项目会产生预期的结果,settings.py非常简单:
ITEM\u管道=[
'mySpider.pipelines.MySpiderPipeline',
“mySpider.pipelines.PipeCleaner”,
'mySpider.pipelines.DBWriter',
]
管道似乎是正确的(SAN导入):
类MySpiderPipeline(对象):
def过程_项目(自身、项目、蜘蛛):
打印“管道:已获取”,项目[“名称”]
退货项目
类DBWriter(对象):
“”“将每个项目写入数据库。我希望如此。”。
"""
定义初始化(自):
self.dbpool=adbapi.ConnectionPool('MySQLdb'
,host=settings['host']
,port=int(设置['port'])
,user=settings['user']
,passwd=settings['PASS']
,db=设置['BASE']
,cursorclass=MySQLdb.cursors.DictCursor
,charset='utf8'
,使用_unicode=True
)
打印('init DBWriter')
def过程_项目(自身、项目、蜘蛛):
打印“DBWriter进程\项目”
query=self.dbpool.runInteraction(self.\u insert,item)
query.adderback(self.handle\u错误)
退货项目
def_插件(自身、发送、项目):
打印“DBWriter\u insert”
#这里有很多不相关的代码
退货项目
类PipeCleaner(对象):
定义初始化(自):
打印“清洁这些管道”
def过程_项目(自身、项目、蜘蛛):
打印项目['name'],'is cleeeaaannn!!'
退货项目
当我运行spider时,我在启动时得到以下输出:
Cleaning these pipes.
init DBWriter
2012-10-23 15:30:04-0400 [scrapy] DEBUG: Enabled item pipelines: MySpiderPipeline, PipeCleaner, DBWriter
与它们的init子句不同,它们在爬虫程序启动时会打印到屏幕上,process\u item方法不会打印(或处理)任何内容。我祈祷我忘记了一些非常简单的事情
2012-10-23 15:30:04-0400 [scrapy] DEBUG: Enabled item pipelines: MySpiderPipeline, PipeCleaner, DBWriter
这一行显示您的管道正在初始化,它们正常
问题是你的爬虫类
class MySpider(CrawlSpider):
#RULES AND STUFF
def parse_item(self, response):
'''Takes HTML response and turns it into an item ready for database. I hope.
'''
#A LOT OF CODE
# before returning item , print it
return item
我想你应该先打印一个项目,然后再从MySpider返回它“迟做总比不做好”
#导入
类MySpider(爬行蜘蛛):
#规则和东西
def解析_项(自身、响应):
''获取HTML响应并将其转换为一个可供数据库使用的项目。我希望如此。
'''
#很多代码
你能分享一些蜘蛛实际抓取物品时的日志输出吗?我想我已经发现了问题的部分原因。spider类基于HTML路由数据并将其发送到其他方法。这些其他方法返回该项,但它不会使其进入管道。这可能值得提出另一个问题。