爬取文件怎么保存到mysql_将爬取的数据保存到mysql中

本文详细记录了使用Scrapy爬虫将数据保存到MySQL的过程,包括安装pymysql、创建数据库和表、编写pipeline和settings,以及解决因数据同步问题导致的重复数据错误。最终通过在pipeline中加入互斥锁解决了问题,实现了稳定的数据保存。
摘要由CSDN通过智能技术生成

为了把数据保存到mysql费了很多周折,早上再来折腾,终于折腾好了

安装数据库

1、pip install pymysql(根据版本来装)

2、创建数据

打开终端 键入mysql -u root -p  回车输入密码

create database scrapy (我新建的数据库名称为scrapy)

3、创建表

use scrapy;

create table xiaohua (name varchar(200) ,url varchar(100));

aa02d2d01ada35aa6fa363799273e49f.png

数据库部分就酱紫啦

4、编写pipeline

46d38487e5f862f35a78a9afef3a4ab8.png

5、编写setting

8666d0abf306fcdfc5f550ad096bc03e.png

6、编写spider文件

17e7d3e3b7d0bd6139c385b1cd65b4b9.png

7、爬取数据保存到mysql

scrapy crawl xhwang

之前报错为2018-10-18 09:05:50 [scrapy.log] ERROR: (1241, 'Operand should contain 1 column(s)')

因为我的spider代码中是这样

4047f1c4fa312b95a40ec5e7938777d9.png

附一张网上找到的答案

5b0ac4a22862586de3df173c449651b1.png

错误原因:item中的结果为{'name':[xxx,xxxx,xxxx,xxx,xxxxxxx,xxxxx],'url':[yyy,yyy,yy,y,yy,y,y,y,y,]},这种类型的数据

更正为6下面代码后出现如下会有重复

d0fbfb50fbc738dec65a6f1c120eedb8.png

然后又查了下原因终于解决问题之所在

在图上可以看出,爬取的数据结果是没有错的,但是在保存数据的时候出错了,出现重复数据。那为什么会造成这种结果呢?

其原因是由于spider的速率比较快,scrapy操作数据库相对较慢,导致pipeline中的方法调用较慢,当一个变量正在处理的时候

一个新的变量过来,之前的变量值就会被覆盖了,解决方法是对变量进行保存,在保存的变量进行操作,通过互斥确保变量不被修改。

在pipeline中修改如下代码

563a7cd4768cb70d1e90f73f22bd6929.png

完成以上设定再来爬取,OK 大功告成(截取部分)

c6219d7db4b7fd8e938da8fc03f015c2.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值