mysql scrapy 重复数据_scrapy在重复爬取的时候删除掉之前爬的旧数据

该博客介绍了如何在Scrapy爬虫中处理重复数据,通过在爬虫开始时删除已存在的数据,确保数据库中的信息是最新的。使用了DButil工具连接MySQL数据库,并针对不同数据类型制定了插入或更新策略。
摘要由CSDN通过智能技术生成

#-*- coding: utf-8 -*-

importsys

sys.path.append("/apps/jr_python/riskspiders")from riskspiders.utils importDButilfrom riskspiders.settings importDATABASE_PRMimportloggingimporthashlib

logger= logging.getLogger(__name__)#Define your item pipelines here#

#Don‘t forget to add your pipeline to the ITEM_PIPELINES setting#See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html

classRiskspidersPipeline(object):#连接数据库,只要类一初始化,就已经连好了数据库

db =DButil(DATABASE_PRM)defprocess_item(self, item, spider):returnitemclassRiskspidersMySQLPipeline(object):#连接数据库,只要类一初始化,就已经连好了数据库

#def __init__(self):

#self.md = hashlib.md5()

defopen_spider(self, spider):print("open_spider, %s" %spider.name)

self.db=DButil(DATABASE_PRM)for day inspider.day_list:

sql_del= """delete from riskinfo where spider = ‘{}‘ and release_time = ‘{}‘;""".format(spider.name,day)try:

self.db.execute(sql_del)exceptException as e:print(e)defclose_spider(self,spider):

self.db.close()#以下可以打印大部分的数据收集,但是finish_time等不能输出,因为程序还没有运行完

print(spider.crawler.stats.get_value())defprocess_item(self,item,spider):

db=DButil(DATABASE_PRM)#逐条插入,更新插入

if spider.name == ‘hexun_bankdata‘:#print(‘***** item_bank insert MySQL‘)

logger.info(‘***** item_bank insert MySQL‘)

pa=(

item["source"], item["spider"],item[‘website_menu‘], item["disclosure_period"], item["bank_abbreviation"], item["total_assets"],

item["capital_adequancy_ratio"], item["core_capital_adequancy_ratio"], item["bad_loan_ratio"],

item["provision_coverage"], item["url"], item["cra_time"], item["cra_time"])

sql_data="""insert into hexun_bankdata(source,spider,website_menu,disclosure_period, bank_abbreviation,total_assets,capital_adequancy_ratio,core_capital_adequancy_ratio,bad_loan_ratio,provision_coverage,url,cra_time) values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s) on duplicate key update cra_time = %s;"""

try:

db.execute(sql_data, pa)exceptException as e:printe

logger.error(e)finally:

db.close()else:

md=hashlib.md5()

str1= ‘%s%s‘ % (item[‘title‘], item[‘content‘])

md.update(str1)

md_value=md.hexdigest()#print("str1 is %s,md_value is %s" % (str1,md_value))

logger.info(‘***** item_bank insert MySQL‘)

params=(

item[‘source‘], item[‘spider‘],item[‘website_menu‘], item[‘release_time‘], item[‘key_words‘], item[‘neg_key_words‘], item[‘title‘].strip(),

item[‘source_type‘], item[‘f_name‘], item[‘is_include_tbl‘], item[‘content‘].strip(), item[‘content_web‘], item[‘url‘],

item[‘father_url‘], item[‘cra_time‘], md_value, item[‘cra_time‘]

)try:

db.execute("""insert into riskinfo

(source, spider,website_menu, release_time, key_words,neg_key_words, title, source_type,f_name, is_include_tbl,content,content_web, url,father_url,cra_time,content_id)

values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s) on duplicate key update cra_time = %s;""", params

)exceptException as e:printe

logger.error(e)finally:

db.close()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值