mysql scrapy 重复数据_基于Scrapy架构的网络爬虫入坑第二战(数据存入MySQL)

本文介绍如何使用Scrapy爬取小说信息并存储到MySQL数据库中,包括MySQL安装、MySQLdb的使用,以及如何处理重复数据。通过Navicat Premium实现数据可视化,展示了Scrapy结合MySQL进行数据存储的流程。
摘要由CSDN通过智能技术生成

基于Scrapy架构的网络爬虫入坑第二战(数据存入MySQL)

第一战中,利用Scrapy架构爬取了58租房信息,存入到json文件中。json文件虽然好用,但是结构化和后续处理方面还存在一定的缺陷。为此,决定使用结构化数据库MySQL。

第二战的主要内容是:首先利用Scrapy架构爬取某个小说网站上的小说信息,而后使用MySQLdb将结构化数据存入MySQL,最后利用Navicat Premium访问存储的数据。

惊世三问!!!

问:MySQL是什么?

答:由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下数据库关系系统。

问:为什么选择MySQL存储爬虫数据?

答:作为最流行的关系型数据库管理系统,在WEB应用方面 MySQL 是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。

问:怎么使用MySQL?

MySQL将数据保存在不同的表,使用的 SQL 语言是用于访问数据库的最常用标准化语言。

一、MySQL的安装

整理网上信息,留作以后参考。

Step2:将文件解压到某个目录下;

Step3:在解压文件下创建my.ini配置文件

[mysql]

# 设置mysql客户端默认字符集

default-character-set=utf8

[mysqld]

# 设置3306端口

port = 3306

# 设置mysql的安装目录

basedir=C:\web\mysql-8.0.11

# 设置mysql数据库的数据的存放目录

datadir=C:\web\sqldata

# 允许最大连接数

max_connections=20

# 服务端使用的字符集默认为8比特编码的latin1字符集

character-set-server=utf8

# 创建新表时将使用的默认存储引擎

default-storage-engine=INNODB

Step4:进入/bin文件夹下,而后运行cmd命令

mysqld --initialize --console

mysqld install

二、MySQLdb的安装

MySQLdb是一款较为底层的,python连接mysql用的模块。主要聚焦于如何和数据库进行连接和进行基本的操作,操作的体现形式是执行SQL语句。

MySQLdb可以直接通过pip install MySQL-python完成。

三、爬取数据

具体过程与第一战类似,主要是修改pipelines文件,将数据同时输出到数据库中。

修改后的pipelines文件如下所示:

import pymysql

import pymysql.cursors

import json

import logging

class BooksPipeline(object):

def __init__(self):

self.file = open('books.json', mode='w', encoding='utf-8')

self.mysqlcli = pymysql.connect(host = "localhost",port = 3306,user = "root",passwd = "123456",db = "pythonlearn",charset = "utf8")

self.offset = 0

#创建游标对象

self.cursor = self.mysqlcli.cursor()

print("MySQL数据库连接成功")

# rediscli = redis.Redis(host = "localhost",port = 6379,db = 0)

# print("Redis数据库连接成功")

def process_item(self, item, spider):

jsondata = json.dumps(dict(item), ensure_ascii=False) + "\n"

self.file.write(jsondata)

self.offset += 1

try:

# 查重处理

self.cursor.execute(

"select * from booksname where booksname.title = %s",

item['title'])

# 是否有重复数据 fetchone返回查询的结果

repetition = self.cursor.fetchone()

# 重复

if repetition:

pass

else:

self.cursor.execute("insert into booksname (title,size,date_time,author,download_times,download_url,img_url,category_namme) values (%s,%s,%s,%s,%s,%s,%s,%s)",(item['title'],item['size'],item['date_time'],item['author'],item['download_times'],item['download_url'],item['img_url'],item['category_namme']))

# 提交sql语句

self.mysqlcli.commit()

except Exception as error:

# 出现错误时打印错误日志

logging.error(error)

return item

def close_spider(self, spider):

self.file.close()

self.cursor.close()

四、MySQL数据的可视化

其实,到上一步为止,工作已经完成。从网上爬取得数据可以在cmd窗口查看(只是界面和操作很不友好。。。)

偶然间发现一个名叫Navicat的神器,决定毫不犹豫地安利一把。

Navicat是一款具有多种强大功能的数据库管理工具,可以登陆数据库,设计数据表,进行删除、清空等SQL语句操作。最强大的是支持MySQL、SQLite、Oracle 及 PostgreSQL等多种类型的数据库管理。这里推荐一个注册机(DeltaFoX)

先看神器的庐山真面目

怎么样?

界面看起来就很酷炫。

目前主要解锁了数据表设计查询等常用的功能。上图一张,展示一下爬取的小说信息:题目看起来就很诱人~

五、小结

某位哲人说过:世界上还是大神多。世界上那么多大神开发出好用的框架和软件,再次献出我的膝盖~

再过一个小时国庆假期就结束了,美好的日子总是那么短暂。。。

——后记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值