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

简介: 转: 【http://bdy.lqkweb.com】 【http://www.swpan.cn】 注意:数据保存的操作都是在pipelines.py文件里操作的 将数据保存为json文件 spider是一个信号检测 # -*- coding: utf-8 -*- # Define your it.

注意:数据保存的操作都是在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) + '\n'   #将数据对象转换成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 文件的容器函数

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

image

将数据保存到数据库

我们使用一个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

相关文章
|
9月前
|
数据采集 Web App开发 数据可视化
Python零基础爬取东方财富网股票行情数据指南
东方财富网数据稳定、反爬宽松,适合爬虫入门。本文详解使用Python抓取股票行情数据,涵盖请求发送、HTML解析、动态加载处理、代理IP切换及数据可视化,助你快速掌握金融数据爬取技能。
7548 1
|
9月前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
736 0
|
9月前
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南
|
9月前
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。
|
9月前
|
存储 监控 算法
117_LLM训练的高效分布式策略:从数据并行到ZeRO优化
在2025年,大型语言模型(LLM)的规模已经达到了数千亿甚至数万亿参数,训练这样的庞然大物需要先进的分布式训练技术支持。本文将深入探讨LLM训练中的高效分布式策略,从基础的数据并行到最先进的ZeRO优化技术,为读者提供全面且实用的技术指南。
885 2
|
10月前
|
数据采集 关系型数据库 MySQL
python爬取数据存入数据库
Python爬虫结合Scrapy与SQLAlchemy,实现高效数据采集并存入MySQL/PostgreSQL/SQLite。通过ORM映射、连接池优化与批量提交,支持百万级数据高速写入,具备良好的可扩展性与稳定性。
|
10月前
|
JSON API 数据安全/隐私保护
Python采集淘宝评论API接口及JSON数据返回全流程指南
Python采集淘宝评论API接口及JSON数据返回全流程指南
|
数据采集 前端开发 JavaScript
Scrapy结合Selenium实现搜索点击爬虫的最佳实践
Scrapy结合Selenium实现搜索点击爬虫的最佳实践
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
715 6
|
数据采集 中间件 开发者
Scrapy爬虫框架-自定义中间件
Scrapy爬虫框架-自定义中间件
342 1

推荐镜像

更多