资讯专栏INFORMATION COLUMN

21、 Python快速开发分布式搜索引擎Scrapy精讲—爬虫数据保存

Alex / 1270人阅读

摘要:百度云搜索,搜各种资料搜网盘,搜各种资料注意数据保存的操作都是在文件里操作的将数据保存为文件是一个信号检测导入图片下载器模块定义数据处理类,必须继承初始化时打开文件为数据处理函数,接收一个,里就是爬虫最后来的数据对象文章标题是

【百度云搜索,搜各种资料:http://www.bdyss.cn】 【搜网盘,搜各种资料:http://www.swpan.cn】

注意:数据保存的操作都是在pipelines.py文件里操作的

将数据保存为json文件

spider是一个信号检测

# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don"t forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html
from scrapy.pipelines.images import ImagesPipeline  #导入图片下载器模块
import codecs
import json

class AdcPipeline(object):                      #定义数据处理类,必须继承object
    def __init__(self):
        self.file = codecs.open("shuju.json", "w", encoding="utf-8")  #初始化时打开json文件
    def process_item(self, item, spider):       #process_item(item)为数据处理函数,接收一个item,item里就是爬虫最后yield item 来的数据对象
        # print("文章标题是:" + item["title"][0])
        # print("文章缩略图url是:" + item["img"][0])
        # print("文章缩略图保存路径是:" + item["img_tplj"])  #接收图片下载器填充的,图片下载后的路径

        #将数据保存为json文件
        lines = json.dumps(dict(item), ensure_ascii=False) + "
"   #将数据对象转换成json格式
        self.file.write(lines)          #将json格式数据写入文件
        return item
def spider_closed(self,spider):     #创建一个方法继承spider,spider是一个信号,当前数据操作完成后触发这个方法
        self.file.close()               #关闭打开文件

class imgPipeline(ImagesPipeline):                      #自定义一个图片下载内,继承crapy内置的ImagesPipeline图片下载器类
    def item_completed(self, results, item, info):      #使用ImagesPipeline类里的item_completed()方法获取到图片下载后的保存路径
        for ok, value in results:
            img_lj = value["path"]     #接收图片保存路径
            # print(ok)
            item["img_tplj"] = img_lj  #将图片保存路径填充到items.py里的字段里
        return item                    #将item给items.py 文件的容器函数

    #注意:自定义图片下载器设置好后,需要在

将数据保存到数据库

我们使用一个ORM框架sqlalchemy模块,保存数据

数据库操作文件

#!/usr/bin/env python
# -*- coding:utf-8 -*-

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column
from sqlalchemy import Integer, String, TIMESTAMP
from sqlalchemy import ForeignKey, UniqueConstraint, Index
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy import create_engine

#配置数据库引擎信息
ENGINE = create_engine("mysql+pymysql://root:279819@127.0.0.1:3306/cshi?charset=utf8", max_overflow=10, echo=True)

Base = declarative_base()       #创建一个SQLORM基类

class SendMsg(Base):            #设计表
    __tablename__ = "sendmsg"

    id = Column(Integer, primary_key=True, autoincrement=True)
    title = Column(String(300))
    img_tplj = Column(String(300))

def init_db():
    Base.metadata.create_all(ENGINE)        #向数据库创建指定表

def drop_db():
    Base.metadata.drop_all(ENGINE)          #向数据库删除指定表

def session():
    cls = sessionmaker(bind=ENGINE)         #创建sessionmaker类,操作表
    return cls()

# drop_db()         #删除表
# init_db()         #创建表

pipelines.py文件

# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don"t forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html
from scrapy.pipelines.images import ImagesPipeline  #导入图片下载器模块
from adc import shujuku as ORM                      #导入数据库文件

class AdcPipeline(object):                      #定义数据处理类,必须继承object
    def __init__(self):
        ORM.init_db()                           #创建数据库表
    def process_item(self, item, spider):       #process_item(item)为数据处理函数,接收一个item,item里就是爬虫最后yield item 来的数据对象
        print("文章标题是:" + item["title"][0])
        print("文章缩略图url是:" + item["img"][0])
        print("文章缩略图保存路径是:" + item["img_tplj"])  #接收图片下载器填充的,图片下载后的路径

        mysq = ORM.session()
        shuju = ORM.SendMsg(title=item["title"][0], img_tplj=item["img_tplj"])
        mysq.add(shuju)
        mysq.commit()
        return item

class imgPipeline(ImagesPipeline):                      #自定义一个图片下载内,继承crapy内置的ImagesPipeline图片下载器类
    def item_completed(self, results, item, info):      #使用ImagesPipeline类里的item_completed()方法获取到图片下载后的保存路径
        for ok, value in results:
            img_lj = value["path"]     #接收图片保存路径
            # print(ok)
            item["img_tplj"] = img_lj  #将图片保存路径填充到items.py里的字段里
        return item                    #将item给items.py 文件的容器函数

    #注意:自定义图片下载器设置好后,需要在

【转载自:http://www.lqkweb.com】

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/45126.html

相关文章

  • 20、 Python快速开发布式搜索引擎Scrapy精讲—编写spiders爬虫文件循环抓取内容

    摘要:百度云搜索,搜各种资料搜网盘,搜各种资料编写爬虫文件循环抓取内容方法,将指定的地址添加到下载器下载页面,两个必须参数,参数页面处理函数使用时需要方法,是库下的方法,是自动拼接,如果第二个参数的地址是相对路径会自动与第一个参数拼接导 【百度云搜索,搜各种资料:http://bdy.lqkweb.com】 【搜网盘,搜各种资料:http://www.swpan.cn】 编写spiders爬...

    CntChen 评论0 收藏0
  • 18、 Python快速开发布式搜索引擎Scrapy精讲Scrapy启动文件的配置—xpath表

    摘要:百度云搜索,搜各种资料搜网盘,搜各种资料我们自定义一个来作为启动文件导入执行命令方法给解释器,添加模块新路径将文件所在目录添加到解释器执行命令爬虫文件表达式基本使用设置爬虫起始域名设置爬虫起始地址默认爬虫回调函数,返 【百度云搜索,搜各种资料:http://www.bdyss.cn】 【搜网盘,搜各种资料:http://www.swpan.cn】 我们自定义一个main.py来作为启动...

    rubyshen 评论0 收藏0
  • 23、 Python快速开发布式搜索引擎Scrapy精讲—craw scrapy item lo

    摘要:百度云搜索,搜各种资料搜网盘,搜各种资料用命令创建自动爬虫文件创建爬虫文件是根据的母版来创建爬虫文件的查看创建爬虫文件可用的母版母版说明创建基础爬虫文件创建自动爬虫文件创建爬取数据爬虫文件创建爬取数据爬虫文件创建一个基础母版爬虫,其他同理 【百度云搜索,搜各种资料:http://www.bdyss.cn】 【搜网盘,搜各种资料:http://www.swpan.cn】 用命令创建自动爬...

    QiuyueZhong 评论0 收藏0
  • 24、Python快速开发布式搜索引擎Scrapy精讲爬虫和反爬的对抗过程以及策略—scrapy

    摘要:百度云搜索,搜各种资料搜网盘,搜各种资料基本概念反爬虫的目的爬虫和反爬的对抗过程以及策略架构源码分析图 【百度云搜索,搜各种资料:http://www.lqkweb.com】 【搜网盘,搜各种资料:http://www.swpan.cn】 1、基本概念 showImg(https://segmentfault.com/img/remote/1460000019749170); 2、反爬...

    PumpkinDylan 评论0 收藏0
  • 25、Python快速开发布式搜索引擎Scrapy精讲—Requests请求和Response响应

    摘要:百度云搜索,搜各种资料搜网盘,搜各种资料请求请求就是我们在爬虫文件写的方法,也就是提交一个请求地址,请求是我们自定义的方法提交一个请求参数字符串类型地址回调函数名称字符串类型请求方式,如果字典类型的,浏览器用户代理设置字典类型键值对,向回调 【百度云搜索,搜各种资料:http://www.lqkweb.com】 【搜网盘,搜各种资料:http://www.swpan.cn】 Reque...

    Shihira 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<