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的更多相关文章

  1. scrapy Pipeline使用twisted异步实现mysql数据插入

    from twisted.enterprise import adbapi class MySQLAsyncPipeline: def open_spider(self, spider): db = ...

  2. scrapy Pipeline 练习

    class WeatherPipeline(object): def process_item(self, item, spider): print(item) return item #插入到red ...

  3. scrapy项目5:爬取ajax形式加载的数据,并用ImagePipeline保存图片

    1.目标分析: 我们想要获取的数据为如下图: 1).每本书的名称 2).每本书的价格 3).每本书的简介 2.网页分析: 网站url:http://e.dangdang.com/list-WY1-dd ...

  4. Scrapy 下载文件和图片

    我们学习了从网页中爬取信息的方法,这只是爬虫最典型的一种应用,除此之外,下载文件也是实际应用中很常见的一种需求,例如使用爬虫爬取网站中的图片.视频.WORD文档.PDF文件.压缩包等. 1.Files ...

  5. Python逆向爬虫之scrapy框架,非常详细

    爬虫系列目录 目录 Python逆向爬虫之scrapy框架,非常详细 一.爬虫入门 1.1 定义需求 1.2 需求分析 1.2.1 下载某个页面上所有的图片 1.2.2 分页 1.2.3 进行下载图片 ...

  6. Scrapy:为spider指定pipeline

    当一个Scrapy项目中有多个spider去爬取多个网站时,往往需要多个pipeline,这时就需要为每个spider指定其对应的pipeline. [通过程序来运行spider],可以通过修改配置s ...

  7. Python爬虫从入门到放弃(十六)之 Scrapy框架中Item Pipeline用法

    当Item 在Spider中被收集之后,就会被传递到Item Pipeline中进行处理 每个item pipeline组件是实现了简单的方法的python类,负责接收到item并通过它执行一些行为, ...

  8. 二、Item Pipeline和Spider-----基于scrapy取校花网的信息

    Item Pipeline 当Item在Spider中被收集之后,它将会被传递到Item Pipeline,这些Item Pipeline组件按定义的顺序处理Item. 每个Item Pipeline ...

  9. Scrapy爬虫框架第七讲【ITEM PIPELINE用法】

    ITEM PIPELINE用法详解:  ITEM PIPELINE作用: 清理HTML数据 验证爬取的数据(检查item包含某些字段) 去重(并丢弃)[预防数据去重,真正去重是在url,即请求阶段做] ...

随机推荐

  1. Flask:上下文管理

    1. werkzurg from werkzur.serving import run_simple def run(environ,start_response): reuturn [b'hello ...

  2. 深入理解hadoop之HDFS

    深入理解hadoop之HDFS 刚刚才写完关于mapreduce的一篇博文,趁热打铁接下来聊聊HDFS.本博文参考资料为HADOOP权威指南第3版完版,博文如有错漏之处,敬请指正. HDFS即Hado ...

  3. ztree树id、pid转成children格式的(待整理完整)

    山铝菜单 因为菜单选用了bootstrap treeview ,而格式需要是children类似的格式 var nodes = [ {name: "父节点1", children: ...

  4. 4.Linux用户与权限管理

    Linux 系统是一个多用于多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统 新增用户: useradd  新用户名 设置密码:pa ...

  5. java代码备份mysql数据库

    编写bat文件 @echo off set "date_string=%date:~0,4%-%date:~5,2%-%date:~8,2%" set "time_str ...

  6. vue下载后台传过来的乱码流的解决办法

    后台返回的乱码流 解决办法: 请求方式用的是axios,主要加关键的 {responseType: 'blob'} axios封装 export function postDownload(url, ...

  7. 第四章·Kibana入门-安装,索引添加及界面功能

    1.Kibana简介及部署 什么是Kibana? Kibana是一个通过调用elasticsearch服务器进行图形化展示搜索结果的开源项目. Kibana安装及配置 #将Kibana安装包上传至服务 ...

  8. 【学】第一节 rt-thread的rt_kprintf功能的实现

    @2019-06-20 [主题] 拿到一个stm32f407新板,使用rt-thread源码中的bsp中的stm32f407-discovery工程,操作串口外设实现rt_kprintf功能 [问题] ...

  9. python函数:叠加装饰器、迭代器、自定义迭代器、生成式

    一.叠加多个装饰器二.迭代器三.自定义迭代器四.xxx生成式 一.叠加多个装饰器 # 加载装饰器就是将原函数名偷梁换柱成了装饰器最内层那个wrapper函数 # 在加载完毕后,调用原函数其实就是在调用 ...

  10. jQuery获取表单全部数据

    iQuery如何获取表单的全部数据,用于ajax提交 var formData = {}; var t = $('#Form').serializeArray(); $.each(t, functio ...