爬取数据不保存,就是耍流氓(3)

实战流程---网络爬虫爬取用户数据和文章数据存到数据库流程 实战流程---网络爬虫爬取用户数据和文章数据存到数据库流程 在大数据时代,信息的采集是一项重要的工作,而互联网中的数据是海量的,如果单纯 靠人力进行信息采集,不仅低效繁琐,搜集的成本也会提高。如何自动高效地获取互联网 中我们感兴趣的信息并为我们所用是一个重要的问题,而爬虫技术就是为了解决这些问题 而生的。 ​ 网络爬虫(Web crawler)也叫做网络机器人,可以代替人们自动地在互联网中进行数 据信息的采集与整理。它是一种按照一定的规则,自动地抓取万维网信息的程序或者脚 本,可以自动采集所有其能够访问到的页面内容,以获取或更新这些网站的内容和检索方 式。 立即下载

爬虫利器初体验(1)

听说你的爬虫又被封了?(2)

爬取数据不保存,就是耍流氓(3)

爬取两万多租房数据,告诉你广州房租现状(4)

scrapy 也能爬取妹子图?(5)

目录

  • 前言
  • Items
  • Pipelines
  • 瞎比比

前言

OK,通过签名两篇文章《爬虫利器初体验(1)》《听说你的爬虫又被封了?(2)》,我们初体验也过了,爬虫代码健壮性也升级为 PLUS 了。都分析到这个地步了,是不是感觉还少了点什么?对,我们还没保存数据呀?不保存,这不是瞎忙活吗?

Items

item 是我们保存数据的容器,其类似于 python 中的字典。使用 item 的好处在于: **Item 提供了额外保护机制来避免拼写错误导致的未定义字段错误。**且看栗子:

import scrapy
class Doubantop250Item(scrapy.Item):
    title = scrapy.Field()  # 电影名字
    star = scrapy.Field()  # 电影评分
    quote = scrapy.Field()  # 脍炙人口的一句话
    movieInfo = scrapy.Field()  # 电影的描述信息,包括导演、主演、电影类型

Pipelines

pipelines.py 一般我们用于保存数据,其方法的一些介绍如下图。下面,我会分多种方式来保存我们的数据,避免你耍流氓。

保存到 Json

import json
class JsonPipeline(object):
    file_name = base_dir + '/doubanTop250/data.json'  # json 文件路径
    def process_item(self, item, spider):
        file = open(self.file_name, 'r', encoding='utf-8')
        load_data = json.load(file)
        load_data.append({"title": item["title"].strip()}) # 追加数据
        file = open(self.file_name, 'w', encoding='utf-8')
        json.dump(load_data, file, ensure_ascii=False) # 保存数据
        file.close()
        return item

保存到 CSV

    def appendDta2Csv(self, file_name, new_headers, new_data):
        with open(file_name,'r') as f:
            f_csv = csv.reader(f)
            try:# 如何有源文件没有 headers ,将调用传进来的 headers
                headers = next(f_csv)
            except:
                headers = new_headers
            old_data = list(f_csv)
            old_data.append(new_data) # 追加新的数据
            with open(file_name, 'w') as f2:# 保存数据
                f_csv = csv.writer(f2)
                f_csv.writerow(headers)
                f_csv.writerows(old_data)
                f2.close()
            f.close()

    def process_item(self, item, spider):
        self.appendDta2Csv(self.file_name, ["title"], [item["title"].strip()])
        return item

保存到 MongoDB

from pymongo import MongoClient
import os
base_dir = os.getcwd()
class MongoPipeline(object):
    # 实现保存到mongo数据库的类,
    collection = 'douban'  # mongo 数据库的 collection 名字

    def __init__(self, mongo_uri, db_name, db_user, db_pass):
        self.mongo_uri = mongo_uri
        self.db_name = db_name
        self.db_user = db_user
        self.db_pass = db_pass

    @classmethod
    def from_crawler(cls, crawler):
        # scrapy 为我们访问settings提供了这样的一个方法,这里,
        # 我们需要从 settings.py 文件中,取得数据库的URI和数据库名称
        return cls(
            mongo_uri=crawler.settings.get('MONGO_URI'),
            db_name=crawler.settings.get('DB_NAME'),
            db_user=crawler.settings.get('DB_USER'),
            db_pass=crawler.settings.get('DB_PASS'))

    def open_spider(self, spider):  # 爬虫启动时调用,连接到数据库
        self.client = MongoClient(self.mongo_uri)
        self.zfdb = self.client[self.db_name]
        self.zfdb.authenticate(self.db_user, self.db_pass)

    def close_spider(self, spider):  # 爬虫关闭时调用,关闭数据库连接
        self.client.close()

    def process_item(self, item, spider):
        self.zfdb[self.collection].insert({"title": item["title"].strip()})
        return item

保存到 MySQL

from sqlalchemy import create_engine, Column, Integer, String, BIGINT, ForeignKey, UniqueConstraint, Index, and_, \
    or_, inspect
from sqlalchemy.orm import sessionmaker, relationship, contains_eager
class MysqlPipeline(object):
    MYSQL_URI = 'mysql+pymysql://username:password@localhost:3306/db_name'
    # echo 为 True 将会输出 SQL 原生语句
    engine = create_engine(MYSQL_URI, echo=True)
    from sqlalchemy.ext.declarative import declarative_base
    Base = declarative_base()

    # 创建单表
    class Movie(Base):
        __tablename__ = 'movies'
        id = Column(BIGINT, primary_key=True, autoincrement=True)
        title = Column(String(200))
    # 初始化数据库
    def init_db(self):
        self.Base.metadata.create_all(self.engine)
    # 删除数据库
    def drop_db(self):
        self.Base.metadata.drop_all(self.engine)
    def open_spider(self, spider):  # 爬虫启动时调用,连接到数据库
        self.init_db()
        Session = sessionmaker(bind=self.engine)
        self.session = Session()
    def process_item(self, item, spider):
        new_movie = self.Movie(title=item["title"].strip())
        self.session.add(new_movie)
        self.session.commit()
        return item


在写好相关的 pipeline 之后,需要在 settings.py 中启用相关的 pipeline,后面的数字为调用的优先级,数字是0-1000,你可以自定义。你可以所有格式都保存,也可以注释掉其他,值保留一个。

ITEM_PIPELINES = {
    'doubanTop250.pipelines.MongoPipeline': 300,
    'doubanTop250.pipelines.MysqlPipeline': 301,
    'doubanTop250.pipelines.CsvPipeline': 302,
    'doubanTop250.pipelines.JsonPipeline': 303,
}

瞎比比

数据保存就说到这里了,后台回复【scrapy初体验】获取源码,为什么获取源码的关键词都一样呢?因为每推一篇文章,代码都会升级。那么,请期待后面的代码吧,哈哈

zone_qrcode.jpg

农业杂草检测——甜菜杂草目标检测数据集 甜菜田中常见的杂草种类繁多,主要有稗草、狗尾草、芦苇、灰藜等。•稗草:一年生草本植物,和稻子外形极为相似。秆直立,光滑无毛。圆锥花序主轴具角棱,粗糙;小穗密集于穗轴的一侧,具极短柄或近无柄。花果期 7 - 10月。生长在稻田里、沼泽、沟渠旁、低洼荒地等。•狗尾草:又叫莠,因穗形像狗尾巴而得名。秆疏丛生,直立或基部膝曲上升。叶片条状披针形,叶鞘松弛,光滑,鞘口有毛;叶舌毛状。圆锥花序呈圆柱状,直立或稍弯垂,刚毛绿色或变紫色。夏、秋采收,晒干。常生长在麦田、谷子、玉米、棉花、豆类、花生、薯类、蔬菜、甜菜、马铃薯 阅读详情

相关推荐

关于42步进电机驱动——基于STM32 HAL库实现

我找了好多资料,好多关于42步进电机的都是文档,这么文档都需要积分,需要积分就算了内容还非常差,浪费时间和电脑的内存。关于大部分是基于Arduino和51去驱动的 42步进电机驱动硬件如下: 首先你要了解步进电机的驱动原理,我也不啰嗦了,请看这边博客: 二相四线,四相五线,四相六线步进电机接线及驱动方法 , 看完这篇你就知道驱动和接线的原理了。 起初我也为如何接线烦恼,因为有些博客在讲述这些问题的时候没有讲的很透彻。 方法如下: ①用万用表调到欧姆档,用其中一个表笔搭在一个引脚上,依次测其它.

Jodan132的博客 1万+

行业类别数据爬取和uniapp多级数据联动(一)

需要在app内做个用户行业和职业类别的选择

kinghuahua 807

ESP32-P4开发板实战:从零配置VSCode环境到点亮MIPI-DSI屏幕(避坑指南)

本文详细介绍了ESP32-P4开发板在VSCode环境下的配置流程,包括SDK安装、idf_component.yml依赖管理,以及MIPI-DSI屏幕驱动的实现方法。通过实战指南帮助开发者避开常见配置陷阱,快速完成从环境搭建到屏幕点亮的全流程,适用于物联网和嵌入式开发场景。

pp12345的博客 742

Scrapy框架系列--数据不保存,就是耍流氓(3)

目录前言ItemsPipelines瞎比比前言OK,通过签名两篇文章《爬虫利器初体验(1)》《听说你的爬虫又被封了?(2)》,我们初体验也过了,爬虫代码健壮性也升级为 P...

lsxxx2011的专栏 446

WRF-BEM相关参数说明

本参数适用于WRF-BEM模拟武汉市气候。

m0_60013472的博客 1896

.NET+Vue企业级RBAC权限平台:开箱即用的生产就绪方案

RBAC(基于角色的访问控制)是企业系统安全治理的基础模型,其核心在于将用户、角色与权限解耦,通过动态能力组合实现细粒度管控。在真实工程中,RBAC需突破静态角色限制,支持时间维度授权、前后端双重鉴权、行级数据范围控制等关键能力。本文聚焦于一套已落地金融、政务、制造等多行业的生产级实现——基于.NET Minimal API与Vue 3的前后端分离架构,提供菜单/按钮/接口/数据四层权限控制,内置滑动过期JWT、Redis权限缓存、动态路由加载与权限指令等开箱即用能力,显著降低权限配置与审计成本。

weixin_33326218的博客 275

爬虫被封禁原因

爬虫被封禁常见原因 1.首先,检查 JavaScript 。如果你从网络服务器收到的页面是空白的,缺少信息,或其遇到他不符合你预期的情况(或者不是你在浏览器上看到的内容),有可能是因为网站创建页面的 JavaScript 执行有问题。 2.检查正常浏览器提交的参数。如果你准备向网站提交表单或发出 POST 请求,记得检查一下页面的内容,看看你想提交的每个字段是不是都已经填好,而且格式也正确。用...

pergoods的博客 3383

手把手教你用RoboTwin训练RDT模型:从环境配置到实战微调(避坑指南)

本文提供了一份详尽的避坑指南,手把手教你如何在RoboTwin开源仿真环境中,从零开始配置环境、采集数据并完成RDT视觉语言动作模型的实战微调。文章涵盖了环境搭建、数据流水线构建、模型配置与训练等关键步骤,旨在帮助研究者和开发者高效利用仿真数据,低成本探索具身智能应用。

weixin_29094979的博客 132

python爬取不到数据的可能原因之一

自学Python爬虫,感觉自己的代码没有什么问题,但是输出却没有结果,一开始陷入了沉思,偶然想起,很多网站为了反爬虫,对于没有“头”的爬虫,网站会拒绝请求。于是,抱着试一试的态度,添加了爬虫的“头”,结果能够正常显示。 这里我是在尝试抓取“瞬眼天下”网页的小标题,代码如下: #爬取顺眼天下网页一页的标题 import requests from bs4 import BeautifulSou...

学无止境 2万+

centos7部署mysql8.0.35,主从复制,主主集群

centos7 linux部署mysql,主从复制,主主模式

zaixiaqin的博客 1990

【Mode】FDE 求解器工作流程

Lumerical---FDE(Finite Difference Eigenmode) Solver

u011699626的博客 4941

Scrapy 爬虫(3):爬取数据不保存,就是耍流氓

(给Python开发者加星标,提升Python技能)作者:Zone (本文来自作者投稿)前言通过前面两篇文章《爬虫利器 Scrapy 初体验(1)》《Scrapy 爬虫(...

Python开发者 1442

25、格式化字符串攻击全解析

本文深入解析了格式化字符串攻击的原理与利用方式,涵盖缓冲区溢出与格式化字符串漏洞的区别,详细介绍了printf函数的工作机制、常见格式化说明符及其安全隐患。文章分析了三类典型编程错误导致的漏洞,并展示了如何通过恶意格式化字符串实现拒绝服务、内存读取和写入攻击。同时,提供了有效的防御措施,包括输入验证、使用安全函数、避免直接使用用户输入作为格式化字符串以及启用编译器安全选项,帮助开发者防范此类高危漏洞。

beer8的博客 83

csv怎么保存开头数字0_爬取数据不保存,就是耍流氓(3)

阅读本文大约需要 10 分钟目录前言ItemsPipelines瞎比比前言OK,通过签名两篇文章《爬虫利器初体验(1)》《听说你的爬虫又被封了?(2)》,我们初体验也过了,爬虫代码健壮性也升级为 PLUS 了。都分析到这个地步了,是不是感觉还少了点什么?对,我们还没保存数据呀?不保存,这不是瞎忙活吗?Itemsitem 是我们保存数据的容器,其类似于 python 中的字典。使用 item 的好处...

weixin_35962608的博客 634

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

csv可以保存特殊字符_爬取数据不保存,就是耍流氓(3)

阅读本文大约需要 10 分钟目录前言ItemsPipelines瞎比比前言OK,通过签名两篇文章《爬虫利器初体验(1)》《听说你的爬虫又被封了?(2)》,我们初体验也过了,爬虫代码健壮性也升级为 PLUS 了。都分析到这个地步了,是不是感觉还少了点什么?对,我们还没保存数据呀?不保存,这不是瞎忙活吗?Itemsitem 是我们保存数据的容器,其类似于 python 中的字典。使用 item 的好处...

weixin_39611043的博客 157

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

python 写csv scrapy_Scrapy 爬虫(3):爬取数据不保存,就是耍流氓

(给Python开发者加星标,提升Python技能)作者:Zone(本文来自作者投稿)前言通过前面两篇文章《爬虫利器 Scrapy 初体验(1)》《Scrapy 爬虫(2):听说你的爬虫又被封了?》,我们初体验也过了,爬虫代码健壮性也升级为 PLUS 了。都分析到这个地步了,是不是感觉还少了点什么?对,我们还没保存数据呀?不保存,这不是瞎忙活吗?Itemsitem 是我们保存数据的容器...

weixin_39641738的博客 320

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

爬取数据不保存,就是耍流氓

我们初体验也过了,爬虫代码健壮性也升级为 PLUS 了。都分析到这个地步了,是不是感觉还少了点什么?对,我们还没保存数据呀?不保存,这不是瞎忙活吗? Items item 是我们保存数据的容器,其类似于 python 中的字典。使用 item 的好处在于:Item 提供了额外保护机制来避免拼写错误导致的未定义字段错误。且看栗子: importscrapy classDoubantop...

485

python用selenium爬取网页数据_Python项目实战:使用selenium爬取拉勾网数据

“一切不经过项目验证的代码都是耍流氓,今天我们就通过一个简单的招聘网站的数据归档进行当前热门岗位的大数据分析,最后以wordcloud进行显示。本文为数据爬取篇。”项目准备:这次我们来比较完整的抓取拉勾网上面“Python”相关招聘信息以及招聘要求详情。能联网的电脑、搭建好Python3以上环境,如果环境没有配置,可以参考我原来的文章Python的安装与配置。IDE这次我们采用Jupyter ...

weixin_34800976的博客 543

Scrapy 爬取数据常见的 4 种保存形式:csv、mysql、mongodb、json

前言: OK,通过签名两篇文章《爬虫利器初体验(1)》《听说你的爬虫又被封了?(2)》,我们初体验也过了,爬虫代码健壮性也升级为 PLUS 了。都分析到这个地步了,是不是感觉还少了点什么?对,我们还没保存数据呀?不保存,这不是瞎忙活吗? Items: item 是我们保存数据的容器,其类似于 python 中的字典。使用 item 的好处在于:Item 提供了额外保护机制来避免拼写错误导致...

Nick.Peng's Blogs 1474

python爬取天天基金网_Python项目实战:使用selenium爬取拉勾网数据

“ 一切不经过项目验证的代码都是耍流氓,今天我们就通过一个简单的招聘网站的数据归档进行当前热门岗位的大数据分析,最后以wordcloud进行显示。本文为数据爬取篇。”项目准备:这次我们来比较完整的抓取拉勾网上面“Python”相关招聘信息以及招聘要求详情。能联网的电脑、搭建好Python3以上环境,如果环境没有配置,可以参考我原来的文章 Python的安装与配置。IDE这次我们采用Jupyter ...

weixin_29359133的博客 252

Python项目实战:使用selenium爬取拉勾网数据

前言: ​ 一切不经过项目验证的代码都是耍流氓,今天我们就通过一个简单的招聘网站的数据归档进行当前热门岗位的大数据分析,最后以wordcloud进行显示。本文为数据爬取篇 项目准备: ​ 这次我们来比较完整的抓取拉勾网上面“Python”相关招聘信息以及招聘要求详情。 ​ 能联网的电脑、搭建好Python3以上环境,如果环境没有配置,可以参考我原来的文章 环境安装及软件下载地址。IDE这次我们采用...

tonyoo的专栏 1631

初学——爬取新笔趣阁案例最新

这是作为新人小白的我第一次写博客,想想还是挺激动的。 首先写代码前,希望大家明白一件事。 代码的规范性。——————真的非常非常非常非常非常重要! 在这之前,我还没体会到代码规范的重要性,直到昨天,我收集项目实例的时候。——头都要大了 同样的需求,代码却千奇百怪,形形色色。我翻烂了github csdn都没找到能看懂的东东。 直到遇见它....... 作为一个爬虫萌新,分享要爬的当然是——————新笔趣阁啦 需求: 输入小说的ID实现爬取整本小说就是这串数字 ps:后面我用异步整出来 再

by_zhou 2930

爬取两万多数据,告诉你广州房租价格现状(4)

爬虫利器初体验(1) 听说你的爬虫又被封了?(2) 爬取数据不保存,就是耍流氓(3) 爬取两万多租房数据,告诉你广州房租现状(4) scrapy 也能爬取妹子图?(5) scrapy遇上ajax,抓取QQ音乐周杰伦专辑与歌词(6) 概述 前言 统计结果 爬虫代码实现 爬虫分析实现 后记 前言 八月份的时候,由于脑洞大开,决定用 python 爬虫爬取了深圳的租房数据,并写了文章《用Python...

weixin_33711641的博客 174
上一篇: scrapy爬虫进阶解析(2)
下一篇: 爬取两万多数据,告诉你广州房租价格现状(4)
zone7_
博客等级 码龄10年 144粉丝 133原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值