利用scrapy将爬到的数据保存到mysql(防止重复)


Posted in Python onMarch 31, 2018

前言

本文主要给大家介绍了关于scrapy爬到的数据保存到mysql(防止重复)的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

1.环境建立

     1.使用xmapp安装php, mysql ,phpmyadmin

     2.安装python3,pip

     3.安装pymysql

     3.(windows 略)我这边是mac,安装brew,用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`);

利用scrapy将爬到的数据保存到mysql(防止重复)

弄好以后是这样的。

2.2 先看下整个爬虫项目的结构

利用scrapy将爬到的数据保存到mysql(防止重复)

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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python 图片验证码代码分享
Jul 04 Python
Python中的lstrip()方法使用简介
May 19 Python
简单了解OpenCV是个什么东西
Nov 10 Python
python实现数据库跨服务器迁移
Apr 12 Python
PyQT实现多窗口切换
Apr 20 Python
Python实现两个list求交集,并集,差集的方法示例
Aug 02 Python
利用Pyhton中的requests包进行网页访问测试的方法
Dec 26 Python
新手如何发布Python项目开源包过程详解
Jul 11 Python
python爬取代理IP并进行有效的IP测试实现
Oct 09 Python
Python用摘要算法生成token及检验token的示例代码
Dec 01 Python
Python Numpy之linspace用法说明
Apr 17 Python
详解Python函数print用法
Jun 18 Python
python 通过xml获取测试节点和属性的实例
Mar 31 #Python
Python Xml文件添加字节属性的方法
Mar 31 #Python
Python简单生成随机数的方法示例
Mar 31 #Python
用python 批量更改图像尺寸到统一大小的方法
Mar 31 #Python
使用Python读取安卓手机的屏幕分辨率方法
Mar 31 #Python
python获取网页中所有图片并筛选指定分辨率的方法
Mar 31 #Python
python如何将图片转换为字符图片
Aug 19 #Python
You might like
如何分别全角和半角以避免乱码
2006/10/09 PHP
php 全局变量范围分析
2009/08/07 PHP
PHP面试常用算法(推荐)
2016/07/22 PHP
Android AsyncTack 异步任务实例详解
2016/11/02 PHP
php常用字符串String函数实例总结【转换,替换,计算,截取,加密】
2016/12/07 PHP
WEB页子窗口(showModalDialog和showModelessDialog)使用说明
2009/10/25 Javascript
jQuery 幻灯片插件(带缩略图功能)
2011/01/24 Javascript
基于jquery的3d效果实现代码
2011/03/23 Javascript
JQuery遍历json数组的3种方法
2014/11/08 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(jquery)
2014/11/16 Javascript
.NET微信公众号开发之创建自定义菜单
2015/07/16 Javascript
js 判断一组日期是否是连续的简单实例
2016/07/11 Javascript
jquery UI Datepicker时间控件冲突问题解决
2016/12/16 Javascript
NodeJs下的测试框架Mocha的简单介绍
2017/02/22 NodeJs
nodejs获取微信小程序带参数二维码实现代码
2017/04/12 NodeJs
JavaScript 数组去重并统计重复元素出现的次数实例
2017/12/14 Javascript
JS简单判断是否在微信浏览器打开的方法示例
2019/01/08 Javascript
JS实现轮播图效果
2020/01/11 Javascript
微信小程序文章列表功能完整实例
2020/06/03 Javascript
pygame学习笔记(2):画点的三种方法和动画实例
2015/04/15 Python
使用Python对Csv文件操作实例代码
2017/05/12 Python
Python基础语言学习笔记总结(精华)
2017/11/14 Python
Python求均值,方差,标准差的实例
2019/06/29 Python
pandas分区间,算频率的实例
2019/07/04 Python
Python代码太长换行的实现
2019/07/05 Python
python爬虫项目设置一个中断重连的程序的实现
2019/07/26 Python
Python 字符串池化的前提
2020/07/03 Python
SK-II神仙水美国官网:SK-II美国
2020/02/25 全球购物
专升本个人自我评价
2013/12/22 职场文书
财务科科长岗位职责
2014/03/10 职场文书
文明市民先进事迹
2014/05/15 职场文书
2014教育局对照检查材料思想汇报
2014/09/23 职场文书
2014年教务处工作总结
2014/12/03 职场文书
计划生育汇报材料
2014/12/26 职场文书
中学教师师德师风承诺书
2015/04/28 职场文书
详解SQL报错盲注
2022/07/23 SQL Server