Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scrapy 刮擦管道装载,但不';行不通_Scrapy_Pipeline - Fatal编程技术网

Scrapy 刮擦管道装载,但不';行不通

Scrapy 刮擦管道装载,但不';行不通,scrapy,pipeline,Scrapy,Pipeline,我有一个粗糙的项目,它加载管道,但不将项目传递给管道。感谢您的帮助 spider的精简版: #导入 类MySpider(爬行蜘蛛): #规则和东西 def解析_项(自身、响应): ''获取HTML响应并将其转换为一个可供数据库使用的项目。我希望如此。 ''' #很多代码 退货项目 此时,打印出项目会产生预期的结果,settings.py非常简单: ITEM\u管道=[ 'mySpider.pipelines.MySpiderPipeline', “mySpider.pipelines.Pipe

我有一个粗糙的项目,它加载管道,但不将项目传递给管道。感谢您的帮助

spider的精简版:

#导入
类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路由数据并将其发送到其他方法。这些其他方法返回该项,但它不会使其进入管道。这可能值得提出另一个问题。