scrapy爬虫保存数据
1.数据保存为TXT
打开Pipeline.py
- import codecs
- import os
- import json
- import pymysql
- class CoolscrapyPipeline(object):#需要在setting.py里设置'coolscrapy.piplines.CoolscrapyPipeline':300
- def process_item(self, item, spider):
- # 获取当前工作目录
- base_dir = os.getcwd()
- fiename = base_dir + '/news.txt'
- # 从内存以追加的方式打开文件,并写入对应的数据
- with open(fiename, 'a') as f:
- f.write(item['title'] + '\n')
- f.write(item['link'] + '\n')
- f.write(item['posttime'] + '\n\n')
- return item
2.保存为json格式
在Pipeline.py里面新建一个类
- #以下两种写法保存json格式,需要在settings里面设置'coolscrapy.pipelines.JsonPipeline': 200
- class JsonPipeline(object):
- def __init__(self):
- self.file = codecs.open('logs.json', 'w', encoding='utf-8')
- def process_item(self, item, spider):
- line = json.dumps(dict(item), ensure_ascii=False) + "\n"
- self.file.write(line)
- return item
- def spider_closed(self, spider):
- self.file.close()
- class JsonPipeline(object):
- def process_item(self, item, spider):
- base_dir = os.getcwd()
- filename = base_dir + '/news.json'
- # 打开json文件,向里面以dumps的方式吸入数据
- # 注意需要有一个参数ensure_ascii=False ,不然数据会直接为utf编码的方式存入比如
- # :“/xe15”
- with codecs.open(filename, 'a') as f:
- line = json.dumps(dict(item), ensure_ascii=False) + '\n'
- f.write(line)
- return item
上面是两种写法,都是一样的
3.保存到mysql
在Pipeline.py里面新建一个类
- import json,pymysql
- class TianyaBbsPipeline(object):
- def open_spider(self,spider):
- self.conn=pymysql.Connect(host='localhost',db='books',user='book',port=3306,passwd='1q2w3e4r5t',charset='utf8')#连接数据库
- self.course=self.conn.cursor(cursor=pymysql.cursors.DictCursor)#创建游标
- sql="create database if not exists tianya character set utf8"#创建一个数据库(判断是否存在,不存在就创建,存在就不创建)
- self.course.execute(sql)#执行sql
- sql='''Create Table If Not Exists tianya.guihua (
- id Bigint(8) unsigned Primary key Auto_Increment,
- thTime DateTime,
- title varchar(50),
- auth varchar(50),
- content text(50)
- ) Engine InnoDB'''#创建表(存在就不创建,不存在就创建)
- self.course.execute(sql)
- def process_item(self, item, spider):
- if isinstance(item,TianyaBbsItem):
- if item['bbs_title']==None or item['auth_name']==None or item['content']==None:
- return item
- sql='insert into tianya.guihua (title,auth,content)values(%s,%s,%s)'
- self.course.execute(sql,(item['bbs_title'],item['auth_name'],item['content']))
- self.conn.commit()
- return item
- def close_spider(self,spider):
- self.course.close()
- self.conn.close()
编写Settings.py
我们需要在Settings.py将我们写好的PIPELINE添加进去,
scrapy才能够跑起来
这里只需要增加一个dict格式的ITEM_PIPELINES,
数字value可以自定义,数字越小的优先处理
- 1 ITEM_PIPELINES={'coolscrapy.pipelines.CoolscrapyPipeline':300,
- 2 'coolscrapy.pipelines.JsonPipeline': 200,
- 3 'coolscrapy.pipelines.TianyaBbsPipeline': 100,
- 4 }
scrapy爬虫保存数据的更多相关文章
- Scrapy爬虫案例 | 数据存储至MySQL
首先,MySQL创建好数据库和表 然后编写各个模块 item.py import scrapy class JianliItem(scrapy.Item): name = scrapy.Field() ...
- Scrapy爬虫案例 | 数据存储至MongoDB
豆瓣电影TOP 250网址 要求: 1.爬取豆瓣top 250电影名字.演员列表.评分和简介 2.设置随机UserAgent和Proxy 3.爬取到的数据保存到MongoDB数据库 items.py ...
- 42.scrapy爬取数据入库mongodb
scrapy爬虫采集数据存入mongodb采集效果如图: 1.首先开启服务切换到mongodb的bin目录下 命令:mongod --dbpath e:\data\db 另开黑窗口 命令:mongo. ...
- scrapy爬虫案例:用MongoDB保存数据
用Pymongo保存数据 爬取豆瓣电影top250movie.douban.com/top250的电影数据,并保存在MongoDB中. items.py class DoubanspiderItem( ...
- python3+Scrapy爬虫使用pipeline数据保存到文本和数据库,数据少或者数据重复问题
爬取的数据结果是没有错的,但是在保存数据的时候出错了,出现重复数据或者数据少问题.那为什么会造成这种结果呢? 其原因是由于Spider的速率比较快,而scapy操作数据库操作比较慢,导致pipelin ...
- scrapy爬取数据保存csv、mysql、mongodb、json
目录 前言 Items Pipelines 前言 用Scrapy进行数据的保存进行一个常用的方法进行解析 Items item 是我们保存数据的容器,其类似于 python 中的字典.使用 item ...
- 分布式爬虫:使用Scrapy抓取数据
分布式爬虫:使用Scrapy抓取数据 Scrapy是Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘. ...
- 第三百五十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—数据收集(Stats Collection)
第三百五十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—数据收集(Stats Collection) Scrapy提供了方便的收集数据的机制.数据以key/value方式存储,值大多是计数 ...
- Scrapy爬虫入门系列3 将抓取到的数据存入数据库与验证数据有效性
抓取到的item 会被发送到Item Pipeline进行处理 Item Pipeline常用于 cleansing HTML data validating scraped data (checki ...
随机推荐
- JS笔记之第二天
一元运算符:++ -- 分为前++和后++ and 前--和后-- 如果++在后面,如:num++ +10参与运算,先参与运算,自身再加1 如果++在前面,如:++num+10参与运算,先自身加1, ...
- 理解一致性Hash算法
简介 一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CAR ...
- MongoDB3.4版本新增特性
先说明一下mongod和mongos的含义:mongod是MongoDB系统的主要后台进程,它处理数据请求.管理数据访问和执行后台管理操作:该命令的命令行选项主要用于测试,在场景操作中,使用配置文件选 ...
- JavaScript使用MQTT
1.MQTT Server使用EMQTTD开源库,自行安装配置: 2.JS使用Websocket连接通信. 3.JS的MQTT库为paho-mqtt,git地址:https://github.com/ ...
- rxjs简单的Observable用例
import React from 'react'; import { Observable } from 'rxjs'; const FlowPage = () => { const onSu ...
- Python3标准库:bisect维护有序列表
1. bisect维护有序列表 bisect模块实现了一个算法来向列表中插入元素,同时仍保持列表有序. 1.1 有序插入 下面给出一个简单的例子,这里使用insort()按有序顺序向一个列表中插入元素 ...
- 源码编译安装python2/3版本
1- 源码编译安装python2.7版本 1.1- 下载源码包 wget https://www.python.org/ftp/python/2.7.14/Python-2.7.14.tgz 1.2- ...
- opencv —— morphologyEx 开运算、闭运算、形态学梯度、顶帽、黑帽
开运算:先腐蚀后膨胀. 能够排除小亮点. 闭运算:先膨胀后腐蚀. 能够排除小黑点. 形态学梯度:膨胀图 — 腐蚀图. 对二值图像进行这一操作,可将图块的边缘突出出来,故可用来保留物体边缘轮廓. 顶帽: ...
- 图片上传的进度条-jquery
<div style="padding: 10px;"> <div class="progress-bar" style="disp ...
- 在服务器上安装并配置JDK1.8
参考链接:https://blog.csdn.net/qq_40958000/article/details/83996912