scrapy pipeline
pipeline的四个方法
@classmethod
def from_crawler(cls, crawler):
"""
初始化的时候,用以创建pipeline对象
:param crawler:
:return:
"""
pass def open_spider(self, spider):
"""
爬虫开始执行时,调用
:param spider:
:return:
"""
pass def process_item(self, item, spider):
"""
每当数据需要持久化时,就会被调用
:param item:
:param spider:
:return:
""" return item def close_spider(self, spider):
"""
爬虫结束执行时,调用
:param spider:
:return:
"""
pass
实例
import pymysql
from scrapy.exceptions import DropItem class ChoutiPipeline(object):
def __init__(self, db_conf):
self.db_conf = db_conf
self.conn = None
self.cursor = None @classmethod
def from_crawler(cls, crawler):
"""
初始化的时候,用以创建pipeline对象
:param crawler:
:return:
"""
db_conf = crawler.settings.get('DATABASE')
return cls(db_conf) def open_spider(self, spider):
"""
爬虫开始执行时,调用
:param spider:
:return:
"""
print('爬虫开始 ...')
self.conn = pymysql.connect(
host=self.db_conf['host'],
port=self.db_conf['port'],
user=self.db_conf['user'],
passwd=self.db_conf['password'],
db=self.db_conf['db'],
charset=self.db_conf['charset']
)
self.cursor = self.conn.cursor() def process_item(self, item, spider):
"""
每当数据需要持久化时,就会被调用
:param item:
:param spider:
:return:
""" sql = 'INSERT INTO articles(title, title_url, summary, create_time, url_md5)' \
' VALUES ("%s", "%s" ,"%s", "%s", "%s")' a = sql % (item['title'], item['title_url'], item['summary'], item['create_time'], item['url_md5']) try:
self.cursor.execute(a)
self.conn.commit()
except Exception as e:
print(e)
return DropItem() def close_spider(self, spider):
"""
爬虫结束执行时,调用
:param spider:
:return:
"""
self.cursor.close()
self.conn.close()
print('爬虫结束 ...')
注册配置文件
全局配置:
# Configure item pipelines
# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
'day1.pipelines.ChoutiPipeline': 300,
}
也可以控制某个爬虫执行那行那个pipeline
class ChoutiSpider(scrapy.Spider):
name = 'Chouti'
allowed_domains = ['dig.chouti.com']
start_urls = ['https://dig.chouti.com/'] custom_settings = {
'ITEM_PIPELINES': {'day1.pipelines.ChoutiPipeline': 1}
}
scrapy pipeline的更多相关文章
- scrapy Pipeline使用twisted异步实现mysql数据插入
from twisted.enterprise import adbapi class MySQLAsyncPipeline: def open_spider(self, spider): db = ...
- scrapy Pipeline 练习
class WeatherPipeline(object): def process_item(self, item, spider): print(item) return item #插入到red ...
- scrapy项目5:爬取ajax形式加载的数据,并用ImagePipeline保存图片
1.目标分析: 我们想要获取的数据为如下图: 1).每本书的名称 2).每本书的价格 3).每本书的简介 2.网页分析: 网站url:http://e.dangdang.com/list-WY1-dd ...
- Scrapy 下载文件和图片
我们学习了从网页中爬取信息的方法,这只是爬虫最典型的一种应用,除此之外,下载文件也是实际应用中很常见的一种需求,例如使用爬虫爬取网站中的图片.视频.WORD文档.PDF文件.压缩包等. 1.Files ...
- Python逆向爬虫之scrapy框架,非常详细
爬虫系列目录 目录 Python逆向爬虫之scrapy框架,非常详细 一.爬虫入门 1.1 定义需求 1.2 需求分析 1.2.1 下载某个页面上所有的图片 1.2.2 分页 1.2.3 进行下载图片 ...
- Scrapy:为spider指定pipeline
当一个Scrapy项目中有多个spider去爬取多个网站时,往往需要多个pipeline,这时就需要为每个spider指定其对应的pipeline. [通过程序来运行spider],可以通过修改配置s ...
- Python爬虫从入门到放弃(十六)之 Scrapy框架中Item Pipeline用法
当Item 在Spider中被收集之后,就会被传递到Item Pipeline中进行处理 每个item pipeline组件是实现了简单的方法的python类,负责接收到item并通过它执行一些行为, ...
- 二、Item Pipeline和Spider-----基于scrapy取校花网的信息
Item Pipeline 当Item在Spider中被收集之后,它将会被传递到Item Pipeline,这些Item Pipeline组件按定义的顺序处理Item. 每个Item Pipeline ...
- Scrapy爬虫框架第七讲【ITEM PIPELINE用法】
ITEM PIPELINE用法详解: ITEM PIPELINE作用: 清理HTML数据 验证爬取的数据(检查item包含某些字段) 去重(并丢弃)[预防数据去重,真正去重是在url,即请求阶段做] ...
随机推荐
- Flask:上下文管理
1. werkzurg from werkzur.serving import run_simple def run(environ,start_response): reuturn [b'hello ...
- 深入理解hadoop之HDFS
深入理解hadoop之HDFS 刚刚才写完关于mapreduce的一篇博文,趁热打铁接下来聊聊HDFS.本博文参考资料为HADOOP权威指南第3版完版,博文如有错漏之处,敬请指正. HDFS即Hado ...
- ztree树id、pid转成children格式的(待整理完整)
山铝菜单 因为菜单选用了bootstrap treeview ,而格式需要是children类似的格式 var nodes = [ {name: "父节点1", children: ...
- 4.Linux用户与权限管理
Linux 系统是一个多用于多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统 新增用户: useradd 新用户名 设置密码:pa ...
- java代码备份mysql数据库
编写bat文件 @echo off set "date_string=%date:~0,4%-%date:~5,2%-%date:~8,2%" set "time_str ...
- vue下载后台传过来的乱码流的解决办法
后台返回的乱码流 解决办法: 请求方式用的是axios,主要加关键的 {responseType: 'blob'} axios封装 export function postDownload(url, ...
- 第四章·Kibana入门-安装,索引添加及界面功能
1.Kibana简介及部署 什么是Kibana? Kibana是一个通过调用elasticsearch服务器进行图形化展示搜索结果的开源项目. Kibana安装及配置 #将Kibana安装包上传至服务 ...
- 【学】第一节 rt-thread的rt_kprintf功能的实现
@2019-06-20 [主题] 拿到一个stm32f407新板,使用rt-thread源码中的bsp中的stm32f407-discovery工程,操作串口外设实现rt_kprintf功能 [问题] ...
- python函数:叠加装饰器、迭代器、自定义迭代器、生成式
一.叠加多个装饰器二.迭代器三.自定义迭代器四.xxx生成式 一.叠加多个装饰器 # 加载装饰器就是将原函数名偷梁换柱成了装饰器最内层那个wrapper函数 # 在加载完毕后,调用原函数其实就是在调用 ...
- jQuery获取表单全部数据
iQuery如何获取表单的全部数据,用于ajax提交 var formData = {}; var t = $('#Form').serializeArray(); $.each(t, functio ...