利用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程序员鲜为人知但你应该知道的17个问题
Jun 04 Python
python中list列表的高级函数
May 17 Python
详解如何使用Python编写vim插件
Nov 28 Python
python如何创建TCP服务端和客户端
Aug 26 Python
python如何查看微信消息撤回
Nov 27 Python
pytorch1.0中torch.nn.Conv2d用法详解
Jan 10 Python
python实现飞机大战游戏(pygame版)
Oct 26 Python
Python 如何批量更新已安装的库
May 26 Python
Pymysql实现往表中插入数据过程解析
Jun 02 Python
python基础之停用词过滤详解
Apr 21 Python
Python机器学习之逻辑回归
May 11 Python
Python连接Postgres/Mysql/Mongo数据库基本操作大全
Jun 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标签云的实现代码
2012/10/10 PHP
使用PHP实现Mysql读写分离
2013/06/28 PHP
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
2014/01/30 PHP
关于js和php对url编码的处理方法
2014/03/04 PHP
php图片处理函数获取类型及扩展名实例
2014/11/19 PHP
wordpress网站转移到本地运行测试的方法
2017/03/15 PHP
JsEasy简介 JsEasy是什么?与下载
2007/03/07 Javascript
Javascript学习笔记一 之 数据类型
2010/12/15 Javascript
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
2010/12/30 Javascript
Iframe实现跨浏览器自适应高度解决方法
2014/09/02 Javascript
node.js中的emitter.emit方法使用说明
2014/12/10 Javascript
jQuery在页面加载时动态修改图片尺寸的方法
2015/03/20 Javascript
修改vue+webpack run build的路径方法
2018/09/01 Javascript
基于vue2.0实现仿百度前端分页效果附实现代码
2018/10/30 Javascript
nuxt中使用路由守卫的方法步骤
2019/01/27 Javascript
JavaScript数组、json对象、eval()函数用法实例分析
2019/02/21 Javascript
小程序实现搜索框
2020/06/19 Javascript
如何用vue-cli3脚手架搭建一个基于ts的基础脚手架的方法
2019/12/12 Javascript
python使用pyhook监控键盘并实现切换歌曲的功能
2014/07/18 Python
Python解析json文件相关知识学习
2016/03/01 Python
浅谈python和C语言混编的几种方式(推荐)
2017/09/27 Python
python 删除列表里所有空格项的方法总结
2018/04/18 Python
解决python中 f.write写入中文出错的问题
2018/10/31 Python
python3利用ctypes传入一个字符串类型的列表方法
2019/02/12 Python
Python实现查找数据库最接近的数据
2020/06/08 Python
Node.js 和 Python之间该选择哪个?
2020/08/05 Python
美国女孩洋娃娃店:American Girl
2017/10/24 全球购物
澳大利亚窗帘商店:Curtain Wonderland
2019/12/01 全球购物
工作失职检讨书范文
2014/01/16 职场文书
《长相思》听课反思
2014/04/10 职场文书
实习单位鉴定评语
2014/04/26 职场文书
教师个人查摆剖析材料
2014/10/14 职场文书
刘胡兰观后感
2015/06/16 职场文书
煤矿安全学习心得体会
2016/01/18 职场文书
日元符号 ¥
2022/02/17 杂记
django项目、vue项目部署云服务器的详细过程
2022/07/23 Servers