利用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 变量类型及命名规则介绍
Jun 08 Python
Python多线程编程(一):threading模块综述
Apr 05 Python
Django发送html邮件的方法
May 26 Python
Python实现堆排序的方法详解
May 03 Python
Django基础知识与基本应用入门教程
Jul 20 Python
python django下载大的csv文件实现方法分析
Jul 19 Python
django中上传图片分页三级联动效果的实现代码
Aug 30 Python
Python 实现毫秒级淘宝抢购脚本的示例代码
Sep 16 Python
Python:合并两个numpy矩阵的实现
Dec 02 Python
Python进程的通信Queue、Pipe实例分析
Mar 30 Python
基于python纯函数实现井字棋游戏
May 27 Python
python PIL模块的基本使用
Sep 29 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
php将数据库导出成excel的方法
2010/05/07 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(六)
2014/06/23 PHP
64位windows系统下安装Memcache缓存
2015/12/06 PHP
php实现登陆模块功能示例
2016/10/20 PHP
PHP实现多图上传(结合uploadify插件)思路分析
2016/11/30 PHP
PHP面向对象学习之parent::关键字
2017/01/18 PHP
利用PHP获取网站访客的所在地位置
2017/01/18 PHP
PHP如何根据文件头检测文件类型实例代码
2018/10/14 PHP
jquery下动态显示jqGrid以及jqGrid的属性设置容易出现问题的解决方法
2010/10/22 Javascript
jquery中ajax学习笔记3
2011/10/16 Javascript
ejs v9 javascript模板系统
2012/03/21 Javascript
javascript删除字符串最后一个字符
2014/01/14 Javascript
JavaScript常用的返回,自动跳转,刷新,关闭语句汇总
2015/01/13 Javascript
jQuery+easyui中的combobox实现下拉框特效
2015/02/27 Javascript
jQuery实现的左右移动焦点图效果
2016/01/14 Javascript
jQuery双向列表选择器select版
2016/11/01 Javascript
JS通过ajax + 多列布局 + 自动加载实现瀑布流效果
2019/05/30 Javascript
js根据后缀判断文件文件类型的代码
2020/05/09 Javascript
原生JavaScript实现留言板
2021/01/10 Javascript
[01:09]DOTAPLUS——DOTA2的新时代
2018/04/04 DOTA
Django集成百度富文本编辑器uEditor攻略
2014/07/04 Python
一波神奇的Python语句、函数与方法的使用技巧总结
2015/12/08 Python
Python+selenium实现截图图片并保存截取的图片
2018/01/05 Python
python 常用的基础函数
2018/07/10 Python
详解python中sort排序使用
2019/03/23 Python
python ssh 执行shell命令的示例
2020/09/29 Python
CSS3实现文字描边的2种方法(小结)
2020/02/14 HTML / CSS
New Balance法国官方网站:购买鞋子和服装
2019/09/01 全球购物
如何查看在weblogic中已经发布的EJB
2012/06/01 面试题
2014年国庆节活动总结
2014/08/26 职场文书
劳模先进事迹材料
2014/12/24 职场文书
诚信承诺书
2015/01/19 职场文书
中标通知书范本
2015/04/17 职场文书
2016暑期校本培训心得体会
2016/01/08 职场文书
党组织结对共建协议书
2016/03/23 职场文书
单身狗福利?Python爬取某婚恋网征婚数据
2021/06/03 Python