利用scrapy将爬到的数据保存到mysql(防止重复)
作者:Waiting For You 发布时间:2024-01-23 15:35:28
标签:scrapy,mysql,重复
前言
本文主要给大家介绍了关于scrapy爬到的数据保存到mysql(防止重复)的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
1.环境建立
1.使用xmapp安装php, mysql ,phpmyadmin
2.安装python3,pip
3.安装pymysql
3.(windows 略)我这边是mac,安 * rew,用brew 安装scrapy
2.整个流程
1. 创建数据库和数据库表,准备保存
2.写入爬虫目标URL,进行网络请求
3.对爬返回数据进行处理,得到具体数据
4.对于具体数据保存到数据库中
2.1.创建数据库
首先创建一个数据库叫scrapy,然后创建一个表article,我们这里给body加了唯一索引,防止重复插入数据
--
-- Database: `scrapy`
--
-- --------------------------------------------------------
--
-- 表的结构 `article`
--
CREATE TABLE `article` (
`id` int(11) NOT NULL,
`body` varchar(200) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`author` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`createDate` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Indexes for table `article`
--
ALTER TABLE `article`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `uk_body` (`body`);
弄好以后是这样的。
2.2 先看下整个爬虫项目的结构
quotes_spider.py是核心,负责对网络请求和对内容进行处理,然后对整理好的内容抛给pipelines进行具体处理,保存到数据库中,这样不会影响速度。
其他的看 图说明
2.2 写入爬虫目标URL,进行网络请求
import scrapy
from tutorial.items import TutorialItem
class QuotesSpider(scrapy.Spider):
name = "quotes"
def start_requests(self):
url = 'http://quotes.toscrape.com/tag/humor/'
yield scrapy.Request(url)
def parse(self, response):
item = TutorialItem()
for quote in response.css('div.quote'):
item['body'] = quote.css('span.text::text').extract_first()
item['author'] = quote.css('small.author::text').extract_first()
yield item
next_page = response.css('li.next a::attr("href")').extract_first()
if next_page is not None:
yield response.follow(next_page, self.parse)
start_requests 就是要写入具体要爬的URL
parse就是核心的对返回的数据进行处理的地方,然后以item的形式抛出,接下来定义好下一个要爬的内容
2.3 items
# -*- coding: utf-8 -*-
# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html
import scrapy
class TutorialItem(scrapy.Item):
body = scrapy.Field()
author = scrapy.Field()
pass
2.4 pipelines
# -*- coding: utf-8 -*-
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
import pymysql
import datetime
from tutorial import settings
import logging
class TutorialPipeline(object):
def __init__(self):
self.connect = pymysql.connect(
host = settings.MYSQL_HOST,
db = settings.MYSQL_DBNAME,
user = settings.MYSQL_USER,
passwd = settings.MYSQL_PASSWD,
charset = 'utf8',
use_unicode = True
)
self.cursor = self.connect.cursor();
def process_item(self, item, spider):
try:
self.cursor.execute(
"insert into article (body, author, createDate) value(%s, %s, %s) on duplicate key update author=(author)",
(item['body'],
item['author'],
datetime.datetime.now()
))
self.connect.commit()
except Exception as error:
logging.log(error)
return item
def close_spider(self, spider):
self.connect.close();
2.5 配置
ITEM_PIPELINES = {
'tutorial.pipelines.TutorialPipeline':300
}
MYSQL_HOST = 'localhost'
MYSQL_DBNAME = 'scrapy'
MYSQL_USER = 'root'
MYSQL_PASSWD = '123456'
MYSQL_PORT = 3306
3.启动爬虫
scrapy crawl quotes
来源:http://www.waitingfy.com/archives/1989


猜你喜欢
- 前言:本篇博客继续学习BeautifulSoup,目标站点选取“溧阳摄影圈”,这一地方论坛。目标站点
- 先看下jupyter和pycharm环境的差别左边是jupyter-------------------------------------
- 不话不多说了,直接上代码吧:<div class="layui-btn-group demoTable" styl
- Python中内置了一些与时间处理相关的库,如time、datatime和calendar库。其中time库是Python中处理时间的标准库
- 使用云服务器时,我们有时会连接数据库,但在使用Navicat Premium15来连接时,总会遇到报错。常规连接方式,以腾讯云服务器中的My
- 在学习与运用ASP中,response对象涉及到的方面也比较多,想全部都掌握也并非一两天的事,我也是最近才发现response对象中居然有这
- 昨晚看了用svg如何制作富有动态的tooltip,于是今天就心血来潮学着做一下,于是也成功做出来,也明白其中的原理,收获颇多阿!接下来要多去
- 有些网页制 * 好者提出了这样一个问题——怎么使用Dreamweaver制作出交换图像来。今天,我向大家介绍制作复杂交换图像的方法,相信能够对
- 一,MySQL8.0.12版本安装步骤。1,下载https://dev.mysql.com/get/Downloads/MySQL-8.0/
- 一、变量创建过程首先,当我们定义了一个变量name = 'Kwan'的时候,在内存中其实是做了这样一件事:程序开辟了一块内存
- 第一种是进行多项式拟合,数学上可以证明,任意函数都可以表示为多项式形式。具体示例如下。###拟合年龄import numpy as npim
- 上四篇的内容是把常用的XHTML标签拿出来介绍了一下,不是很详细。不过没关系,重点是要能先知道用他们,以后深入了再去细细研究更为详细的特性以
- 给一个例子 :# -*- coding: utf-8 -*-import matplotlib.pyplot as plt im
- 首先了解一下需要的几个类所在的packagefrom torchvision import transforms, datasets as
- 本文实例为大家分享了Python实现神经网络算法及应用的具体代码,供大家参考,具体内容如下首先用Python实现简单地神经网络算法:impo
- 我就废话不多说,直接上代码吧:# -*- coding: utf-8 -*-import osout=os.system('nets
- 背景一直对语音合成系统比较感兴趣,总想能给自己合成一点内容,比如说合成小说,把我下载的电子书播报给我听等等。语音合成系统其实就是一个基于语音
- 在上一期python numpy 模块中对概述介绍了numpy 模块安装、使用方法、特点等入门知识。numpy 模块是一个开源的第三方Pyt
- 为了保护系统或数据安全,我们需要最佳随机密码。这里使用unix系统定义的文件设备/dev/random,从中获取随机数生成器的种子。需求说明
- 所用拓展模块 xlrd: Python语言中,读取Excel的扩展工