scrapy+mysql+pipeline+更新数据_python3+Scrapy爬虫实战(二)—— 使用pipeline数据保存到文本和数据库(mysql)...

前言

保存本地

存储Json数据

配置setting

保存数据库

创建数据库

创建表

编写pipelines

配置setting

本文是对上篇文章所讲的代码进一步优化,回看可以点这里,代码就直接在上一篇代码中进行改造,没有的小伙伴可以在这里下载。

前言

Scrapy 提供了 pipeline 模块来执行保存数据的操作。在创建的 Scrapy 项目中自动创建了一个 pipeline.py 文件,同时创建了一个默认的 Pipeline 类。我们可以根据需要自定义 Pipeline 类,然后在 settings.py 文件中进行配置即可。

保存本地

存储Json数据

找到pipelines.py文件,编写下面代码:

这里用到了json包,如果没有的小伙伴可以直接在命令窗口进行下载,下载代码:

pip install json

1

回到hotel.py文件,将“print(item)”改成“yeild item”

配置setting

打开pipelines通道注释,在里面新增一条我们在pipelines中添加的记录

到这里,代码就已经写好了,下面就运行起来看看。

运行成功后会在目录下多出一个文件出来。如图:

打开可以看看:

就是我们想要的。其实pipelines也是很简单,在新增一个pipelines时,只要重写“process_item”方法就可以了。

保存数据库

创建数据库

使用命令创建数据库

CREATE DATABASE `crawler`

1

也可以使用工具创建数据库,我这里是使用Navicat工具创建的。

创建表

使用命令创建表

CREATE TABLE `qunar_city` (

`id`  int NOT NULL AUTO_INCREMENT COMMENT '主键' ,

`name`  varchar(50) NULL COMMENT '城市' ,

`url`  varchar(500) NULL COMMENT 'url' ,

PRIMARY KEY (`id`)

);

1

2

3

4

5

6

使用工具创建表

编写pipelines

在新增一个pipelines

添加相应的包

配置setting

到这里,代码就基本写完了,下面我们运行起来看看。

爬取数据输出结果

数据保存数据库的结果

在图上可以看出,爬取的数据结果是没有错的,但是在保存数据的时候出错了,出现重复数据。那为什么会造成这种结果呢?

其原因是由于Spider的速率比较快,而scapy操作数据库操作比较慢,导致pipeline中的方法调用较慢,这样当一个变量正在处理的时候,一个新的变量过来,之前的变量的值就会被覆盖。

就比如pipline的速率是1TPS,而spider的速率是5TPS,那么数据库应该会有5条重复数据。

解决方案是对变量进行保存,在保存的变量进行操作,通过互斥确保变量不被修改。

下面将代码进行改造一下:

并在头部到了copy包

import copy

1

没有copy包的小伙伴可以在命令窗口进行下载

pip install copy

1

然后先把数据库的数据清空一下,在来运行看看:

现在数据就正常了,可以看到总数据才950条,不像之前那样上千条。

文中代码部分都是用图片的,目的是希望小伙伴们可以直接上手自己敲,代码只有敲多了才能记得更牢,才能学的更快。

本文源代码会在下面给出,如果有什么不懂的地方可以直接下载源代码查看。

因为本人也是一名初学者,如果有什么好的建议欢迎大家在评论中写出,大家一起学习!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373487.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NYOJ 44 子串和

子串和 时间限制&#xff1a;5000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;3描述 给定一整型数列{a1,a2...,an}&#xff0c;找出连续非空子串{ax,ax1,...,ay}&#xff0c;使得该子序列的和最大&#xff0c;其中&#xff0c;1<x<y<n。 输入 第一行是一个…

学习进度条

学习进度条 周次 学习时间 新编写代码行数 博客量&#xff08;篇&#xff09; 学到知识点 第一周 160 0 1 github的使用和认识软件工程这门课的价值。 第二周 160 130 3 复利的计算和Github的一些简单操作还有就是进行项目的开发分析&#xff0c;还有就是对…

ARM基础

1.  将32位a的【7&#xff1a;4】改成0101 -> a a&(~(0xF << 4)) | (0x5 << 4)&#xff1b; 2.  32位&#xff1a;单次处理数据32位。 3.  对于CPU而言&#xff0c;一切皆内存&#xff1b; 4.  DMA总线&#xff1a;不经过CPU直接在内存和内存间交换…

使用Jolokia和JMX进行客户端服务器监视

Java监视工具的选择非常广泛&#xff08;由Google提供的随机选择和顺序&#xff09;&#xff1a; javamelody 压力探头 JVisualVM 控制台 贾蒙 Java JMX Nagios插件不适用 此外&#xff0c;还有各种专用工具&#xff0c;例如ActiveMQ &#xff0c; JBoss &#xff0c; Qu…

图书管理系统数据字典_2. 结构化——数据字典

返回目录&#xff1a;Chilan Yuk&#xff1a;软件工程分析设计图库目录​zhuanlan.zhihu.com一、基本知识用于定义数据流和数据存储的结构&#xff0c;并给出构成所给的数据流和数据存储的各数据项的基本数据类型。数据字典中应该包括关于数据的如下信息一般信息&#xff08;名…

HDOJ 5184 Brackets 卡特兰数扩展

既求从点(0,0)仅仅能向上或者向右而且不穿越yx到达点(a,b)有多少总走法... 有公式: C(ab,min(a,b))-C(ab,min(a,b)-1) /// 折纸法证明卡特兰数: http://blog.sina.com.cn/s/blog_6917f47301010cno.html Brackets Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65…

010-python基础-数据类型-字符串操作

1、移除空白 1 username.strip() 2、分割 1 names "alex,jack,rain" 2 names_1 names.split(",") #  字符串分割之后变成列表 3 print(names_1) 4 #输出 5 [alex, jack, rain] 3、合并列表各元素成为字符串 1 names_1 [alex, jack, rain]2 names_2…

重复次数最多的 子串_每日算法系列【LeetCode 424】替换后的最长重复字符

题目描述给你一个仅由大写英文字母组成的字符串&#xff0c;你可以将任意位置上的字符替换成另外的字符&#xff0c;总共可最多替换 k 次。在执行上述操作后&#xff0c;找到包含重复字母的最长子串的长度。示例1输入&#xff1a; s "ABAB", k 2 输出&#xff1a; …

python基础(一)简单入门

一.第一个python程序 1.交互式编程 直接在命令行里面输入python即可进入python交互式命令行&#xff0c;linux下一样&#xff1a; 在 python 提示符中输入以下文本信息&#xff0c;然后按 Enter 键查看运行效果&#xff1a; 2.脚本式编程 把代码都写到文件里面&#xff0c;然后…

VS2015 python

http://pgqlife.info/2015/05/05/VS-Python/ 配置文档转载于:https://www.cnblogs.com/itdef/p/5262712.html

了解Java弱引用

我最近没来得及关注该博客&#xff0c;最重要的是&#xff0c;我没有为与技术界的所有人保持联系而致歉。 我最近偶然发现了Java 1.2以来提供的java.lang.ref包&#xff0c;但具有讽刺意味的是&#xff0c;几天前我才知道它。 在浏览了几篇有关各种引用类型和java doc的文章时&…

unbuntu 启动任务脚本_Ubuntu下服务启动脚本编写

像Nginx、MySQL等服务一样&#xff0c;在后台运行自己编写的抓取天气信息的Python脚本。1.以管理员权限新建一个服务脚本文件sudo vim /etc/init.d/weather_service2.用下列模板修改该服务脚本文件#!/bin/bash### BEGIN INIT INFO## Provides: weather_service# Required-Start…

iOS开发工具——网络封包分析工具Charles

作者 唐巧 发布于 2013年12月9日 | 1 讨论 分享到&#xff1a;微博微信FacebookTwitter有道云笔记邮件分享稍后阅读我的阅读清单简介 Charles是在Mac下常用的截取网络封包的工具&#xff0c;在做iOS开发时&#xff0c;我们为了调试与服务器端的网络通讯协议&#xff0c;常常需要…

Java Web托管选项流程图

我经常被问到的一个问题是在何处以及如何托管Java Web应用程序。 可以在带有嵌入式服务器的Eclipse中创建它很好&#xff0c;但是如何将它带给人们呢&#xff1f; 长期以来&#xff0c;对于发烧友的程序员一直没有答案。 只有昂贵和超大型的选择。 事情最近变了&#xff0c;但这…

查找出系统中大于50k 且小于100k 的文件并删除。

查找出系统中大于50k 且小于100k 的文件并删除。 [rootxusx xxx]# ll -lhtotal 624K-rw-r--r-- 1 root root 576K Nov 30 21:39 1.txt-rw-r--r-- 1 root root 48K Nov 30 21:40 2.txt [rootxusx xxx]# find ./ -type f -size 1k -a -size -100k ./2.txt 转载于:https://www.cnb…

vb.net mysql存储图片_怎么让VB.NET 上传图片到SQL 数据库只保存路径,图片保存到文件...

我的前台代码dimCoonAsSqlClient.SqlConnectiondimRsAsNewSqlClient.SqlCommandRs.ConnectionCoonRsNewSqlClient.SqlCommand("上传图片",Coon)Rs.CommandTypeCommandType.StoredPr...我的前台代码 dim Coon As SqlClient.SqlConnection dim Rs As New SqlClient.Sql…

[国嵌攻略][132][串口驱动实现]

如何开发Linux驱动程序 一般情况下都会有现成的驱动程序&#xff0c;不需要从零开始开发驱动程序。所以Linux驱动开发主要分为两个步骤&#xff1a;1.读得懂驱动程序&#xff1b;2.写的了核心功能。 发送中断处理程序 发送中断处理函数在/drivers/serial/samsung.c的s3c24xx_se…

使用Regions ADF 11g进行Master Detail CRUD操作

你好 此示例演示了如何使用Regions在表之间创建Master Detail关系。 区域的主要目的是可重用性的概念。 使用区域和有限的任务流&#xff0c;我们可以将页面重用到许多其他页面中&#xff0c;以保持相同的功能并采用更简洁的方法。 下载示例应用程序。 在此示例中&#xff0c;…

[转] vim自定义配置 和 在ubnetu中安装vim

Ubuntu 12.04安装vim和配置 问题&#xff1a; ubuntu默认没有安装vim&#xff0c;出现&#xff1a; jygubuntu:~$ vim test.cThe program vim can be found in the following packages: * vim * vim-gnome * vim-tiny * vim-athena * vim-gtk * vim-noxTry: sudo apt-get insta…

win7 mysql php apache myadmin_windows下Apache+mysql+php+phpMyAdmin的安装及配置 | 学步园

1、下载Apache ( httpd-2.2.25-win32-x86-no_ssl.msi )http://httpd.apache.org/download.cgi#apache24根据提示安装到路径(建议自定义路径)&#xff0c;NetWork Domain和Server Name都输入 localhost(访问时使用的域名);2、下载mysql (mysql-5.5.34-win32.msi )http://dev.m…