scrapy爬取百度新闻,参考网上回答修改Pipeline部分代码:
def process_item(self,item,spider):
asynItem = copy.deepcopy(item)
query=self.dbpool.runInteraction(self.do_insert,asynItem)
query.addErrback(self.handle_error)
def handle_error(self,failure):
print(failure)
def do_insert(self,cursor,item):
check_sql = "select count(*) from `company_news_scrapy` where (`link`,`company_name`) =({},{})".format("'" + item['link'] + "'","'" + item['company_name'] + "'")
cursor.execute(check_sql)
rest = cursor.fetchall()
if rest[0]['count(*)']==0:
insert_sql = "insert into `company_news_scrapy`(`company_name`,`link`) values(%s,%s);"
cursor.execute(insert_sql, (item['company_name'],item['link']))
仍然出现部分数据重复插入问题,求帮助。
会不会在你 select count(*) 之后,insert之前,别的线程插入了该数据呢?
要不你多打印点日志,看看问题出在哪。
另外,你可以试试:设置一下 唯一性约束,然后使用:
insert ... on duplicate key update ...
来操作:无则插入,有则更新