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. Oracle数据库中的变量

    Oracle数据库中的变量 来源:https://blog.csdn.net/wahaa591/article/details/46772769 1.define(即host变量) define va ...

  2. 利用宏方便地书写raw string literals

    以前一直没用过标准库的regex,今天写一个hlsl的解析工具的时候用了一下,发现用字符串字面值写regular expression的时候非常不方便,特别是每个“\”字符都要被识别为转义,只能写成“ ...

  3. php判断

    <?php $str = '我是张三?'; preg_match("/张三/", $str, $match); if($match) { echo ' 张三在文本中'; } ...

  4. 【转】vm ubuntu14.04 建立共享文件夹

    第一步:启动Ubuntu 14.04(其他版本的Ubuntu操作差不多)       1. 在VMware虚拟机界面,点VM->Install VMware Tools.之后,显示如下图:   ...

  5. 实操 | 内存占用减少高达90%,还不用升级硬件?没错,这篇文章教你妙用Pandas轻松处理大规模数据

    注:Pandas(Python Data Analysis Library) 是基于 NumPy 的一种工具,该工具是为了解决数据分析任务而创建的.此外,Pandas 纳入了大量库和一些标准的数据模型 ...

  6. Websocket @serverendpoint 404

    今天写一个前后端交互的websocket , 本来写着挺顺利的,但测试的时候蒙了,前端websocket发的连接请求竟然连接不上 返回状态Status 报了个404 ,然后看后台onError方法也没 ...

  7. linux 下 svn 重新定位 url

    linux下重新定位SVN URL方法:   如果更换了SVN服务器,就需要重新定位,指向新的SVN URL. 重新定位命令:svn switch --relocate 原svn地址 新svn地址   ...

  8. mybatis 注解@Results、@Result、@ResultMap、@One的使用

  9. Pandas中DataFrame数据合并、连接(concat、merge、join)之join

    pandas.DataFrame.join 自己弄了很久,一看官网.感觉自己宛如智障.不要脸了,直接抄 DataFrame.join(other, on=None, how='left', lsuff ...

  10. php类相关知识----类常量,静态变量

    类常量 <?php class myuser { ;//定义的常量不带$符号,常量之前没有访问修饰符,常量之前没有修饰符号 public function monolog() { echo &q ...