当前位置: 首页 > news >正文

Scrapy与MongoDB

        Scrapy可以在非常短的时间里获取大量的数据。这些数据无论是直接保存为纯文本文件还是CSV文件,都是不可取的。爬取一个小时就可以让这些文件大到无法打开。这个时候,就需要使用数据库来保存数据了。

        MongoDB由于其出色的性能,已经成为爬虫的首选数据库。它的出现,使得Scrapy如虎添翼,从此可以放心大胆地爬数据了。

一、 items和pipelines的设置

        为了将Scrapy获取到的数据保存到MongoDB中,应先定义需要抓取的数据。假设需要抓取的信息为name(名字)、age(年龄)、salary(收入)、phone(手机号),那么items可以按照如图所示进行定义。

        一个Scrapy工程可以有多个爬虫;再看items.py文件,可以发现,在一个items.py里面可以对不同的爬虫定义不同的抓取内容Item。

        接下来设置pipelines.py。在这个文件中,需要写出将数据保存到MongoDB的代码。而这里的代码,就是最简单的初始化MongoDB的连接,保存数据,如图所示。

        其中,第9行内容用来得到在settings.py中设置好的数据库相关信息。

from scrapy.conf import settings

        settings.py中的信息都是按照以下格式写的,如图:

名字  = 值

        当在Scrapy工程中需要使用这些配置信息的时候,首选从scrapy.conf中导入settings,然后就可以像使用字典一样从settings中读取数据了:

settings[名字]

        数据库的信息也可以写到settings.py中,如图:

        这里的“MONGODB_HOST”可根据实际情况修改:如果MongoDB运行在爬虫所在的计算机上,那就写“127.0.0.1”;如果专门有一台计算机来运行数据库,那么就设置成对应计算机的IP地址。
        这样统一配置的好处在于,如果数据库进行了修改,那么直接修改settings.py就可以了,不需要在Scrapy的工程里面找哪些地方用了数据库的信息。统一配置是对一个工程的基本要求。
        items.py和pipelines.py设置好以后,Scrapy就可以使用MongoDB来保存数据了。

二、在Scrapy中使用MongoDB

        在设置好items.py和pipelines.py以后,Scrapy已经具备了使用MongoDB来保存数据的要素。此时条件虽然有了,但是还需要告诉Scrapy应该使用pipelines.py中设置的流程来保存数据。所以这个时候需要在settings.py中“告诉”Scrapy,让它知道爬取到的数据应该传到哪里。
        在settings.py中,下面几行数据是被默认注释掉的:

        现在需要解除注释,并设置成定义好的pipeline,其中,它默认的“SomePipeline”需要改成“BaiduPipeline”,如图:

        这里的ITEM_PIPELINES本质上就是一个字典,它的Key是“BaiduPipeline”的路径,而Value是一个数字300。为什么这里会有一个数字?
        实际上,如果仔细观察会发现,pipelines.py文件的文件名是“pipelines”,在英文中这是一个复数名词。而“BaiduPipeline”是一个单数名词。所以,pipelines.py和前面的items.py一样,可以在里面定义多个不同的pipeline来处理数据。这也是为什么图中有一个数字“300”,这个数字称为优先级,数字越大,优先级越低。习惯上,这个数字使用整百数。所以在ITEM_PIPELINES这个字典中也可以按照字典的格式写很多个不同的pipeline,数据会先经过数字小的pipeline,再经过数字大的pipeline。
        现在Scrapy已经知道需要把items中的数据发到pipeline中来使用了。接下来的问题是,如何把爬虫爬取到的数据存放在item中。

        例 :从下面的HTML代码中提取出每个人的姓名、年龄、月薪和电话,并将它们保存到MongoDB中。

        现在,需要做的就是将爬取到的数据放入item中。在Scrapy中,item初始化以后可以像字典一样被调用,如下面代码所示。

        在上面的代码中,往item中添加数据不过就是实例化PersonInfoItem这个类,然后像字典一样使用而已。而代码的最后一行,yield item则是将已经存放好数据的item提交给pipeline来执行。
        yield是Python的一个关键字,使用的时候,代码看起来和return很像,但是它返回的是一个“生成器”对象,而不是某些具体的值。生成器里面的代码在被迭代的时候才会执行且只执行一次。不过这些过程会由Scrapy帮忙实现,所以这里只需要使用yield提交item即可。

        请思考一个问题,为什么下面这一行代码要放在循环的里面而不是外面?

item = PersonInfoItem()

        因为每一次循环都对应了一个人的信息,所以有多少个人就应该有多少个PersonInfoItem的实例。如果实例化PersonInfoItem放在循环外面,那么只能得到一个PersonInfoItem,因此只能保存一个人的内容。在循环进行的过程中,后面的数据会覆盖前面的数据,循环结束以后,最终只能得到最后一个人的信息。

--------------------------------------

没有自由的秩序和没有秩序的自由,同样具有破坏性。

相关文章:

Scrapy与MongoDB

Scrapy可以在非常短的时间里获取大量的数据。这些数据无论是直接保存为纯文本文件还是CSV文件,都是不可取的。爬取一个小时就可以让这些文件大到无法打开。这个时候,就需要使用数据库来保存数据了。 MongoDB由于其出色的性能,已经成为爬虫的首…...

爬虫基础与实践

爬虫技术基础与实践 在当今数字化的时代,数据成为了宝贵的资源。爬虫技术作为获取数据的重要手段,受到了广泛的关注和应用。本文将介绍爬虫的基本概念、工作原理以及一些常用的技术和工具。 一、爬虫的基本概念 爬虫,也称为网络蜘蛛或网络机器…...

快速上手Serverless架构与FastAPI结合实现自动化移动应用后端

快速上手Serverless架构与FastAPI结合实现自动化移动应用后端 引言 随着云计算技术的发展,Serverless架构已经成为构建现代应用的一种流行选择。它允许开发者将更多精力集中在核心业务逻辑上,而无需管理底层基础设施。本文将以AWS Lambda和API Gateway…...

ansible自动化运维(二)playbook模式详解

一.Ansible中的playbook模式 Playbook不同于使用单个模块操作远程服务器,Playbook的功能更加强大。如果说单个模块执行类似于Linux系统中的命令,那么Playbook就类似于shell脚本,将多个模块组合起来实现一组的操作。 Playbook还是会用到ad-h…...

基于Springboot社团管理系统【附源码】

基于Springboot社团管理系统 效果如下: 系统登录页面 用户管理页面 社团信息管理页面 社团活动管理页面 经费信息管理页面 新闻信息管理页面 系统主页面 社团信息页面 研究背景 在当今高校与社区环境中,学生社团蓬勃发展,成为学生课余生活…...

CSS:html中,.png的动态图,怎么只让它显示部分,比如只显示右上部分的,或右边中间部分

目录 背景 方法 1: 使用 background-image 和 background-position 示例代码 解释 方法 2: 使用 clip-path 裁剪图像 示例代码 解释 方法 3: 使用 object-fit 和 overflow 示例代码 解释 示例 总结 背景 在HTML中,如果你有一个 .png 的动态图(例如一个 GIF 动画或…...

解读CVPR2024-论文分享|RepViT: Revisiting Mobile CNN From ViT Perspective

论文标题 RepViT: Revisiting Mobile CNN From ViT Perspective 论文链接: https://arxiv.org/abs/2307.09283 论文作者 Ao Wang, Hui Chen, Zijia Lin, Jungong Han, Guiguang Ding 内容简介 这篇论文探讨了在资源受限的移动设备上,轻量级视觉变…...

linux部署安装wordpress

一、环境准备 首先我们先介绍下环境和实验中所需要的包 环境: 我使用的是centos7.6的系统 建议关掉selinux和影响到80端口的防火墙策略 selinux永久有效 修改 /etc/selinux/config 文件中的 SELINUX"" 为 disabled ,然后重启。 selinux即…...

[Java] 配置Powershell 的 Maven 环境变量

目录 前言单独为 Powershell 设置 Maven 环境变量 前言 安装使用 maven 的时候发现,明明已经配置好了环境变量。但是在 powershell 中还是无法识别 mvn 命令。原来这货需要另外配置。 单独为 Powershell 设置 Maven 环境变量 要在 PowerShell 中永久配置 Maven 环…...

Android -- [SelfView] 自定义弹窗式颜色选择器

Android – [SelfView] 自定义弹窗式颜色选择器 PS: 1. 弹框式显示; 2. 支持透明度设置; 3. 支持拖动控件选择颜色; 4. 支持 ARGB | HEX 数值填写预览颜色并返回; 5. 输出支持Hex 和 Int 两种格式;效果 使用方法&…...

vue-echarts高度缩小时autoresize失效

背景 项目中采用动态给x-vue-echarts style赋值width&#xff0c;height的方式实现echarts图表尺寸的改变 <v-chart...autoresize></v-chart>给v-chart添加autoresize后&#xff0c;在图表宽度变化&#xff0c;高度增加时无异常&#xff0c;高度减小时图表并未缩…...

rabbitMq的rabbitmqctl status报错

Error: unable to perform an operation on node rabbitASUS-PC. Please see diagnostics information and suggestions below. 遇到上图这个错大部分问题可能是由于 RabbitMQ CLI 工具的 Erlang Cookie 与服务器上的不匹配而导致连接问题。Erlang Cookie 在 RabbitMQ 节点之间…...

linux c++ uuid编译时的问题

linux c uuid编译时的问题 写在前面可能编译过和不能编译过的可以编译和link过的不能编译过的 写在前面 几次翻车与uuid相关&#xff0c;超出我认知。 所以&#xff0c;把一些遇到的相关问题写在这里。 可能编译过和不能编译过的 可以编译和link过的 cmake_minimum_require…...

【STM32】RTT-Studio中HAL库开发教程九:FLASH中的OPT

文章目录 一、概要二、内部FLASH排布三、内部FLASH主要特色四、OTP函数介绍五、测试验证 一、概要 STM32系列是一款强大而灵活的微控制器&#xff0c;它的片内Flash存储器可以用来存储有关代码和数据&#xff0c;在实际应用中&#xff0c;我们也需要对这个存储器进行读写操作。…...

[SWPUCTF 2021 新生赛]crypto9

[MoeCTF 2021]Web安全入门指北—GET 意思是GET传参&#xff0c;moeflag 就可以得到falg 输入?moeflag flag为&#xff1a; NSSCTF{ff26110b-8793-403c-990e-15c7f1820596} [SWPUCTF 2021 新生赛]crypto9 #gpt写的代码 from itertools import product letter_list ABCDEFG…...

vue中常用的指令

v - if 指令 功能详细解释 它是一种真正的条件渲染指令。在 Vue 实例初始化以及数据更新过程中&#xff0c;Vue.js 会对v - if指令中的表达式进行求值。这个表达式可以是简单的布尔变量&#xff0c;也可以是一个复杂的计算表达式&#xff0c;只要最终结果是布尔值就行。当表达式…...

Docker Compose实战三:轻松部署PHP

通过前面的文章&#xff08;Docker Compose基础语法与MySQL部署&#xff09;&#xff0c;你已经掌握了Docker Compose的基本语法和常用指令&#xff0c;并成功部署了一个MySQL数据库服务器。今天&#xff0c;我们将继续深入探索Docker Compose的强大功能&#xff0c;介绍如何使…...

数据分析实战—房价特征关系

1.实战内容 &#xff08;1&#xff09; 读取房价特征关系表&#xff08;house_price.npz&#xff09;绘制离地铁站的距离与单位面积的房价的散点图&#xff0c;并对其进行分析&#xff1b; import pandas as pd import numpy as np import warnings warnings.filterwarnings(&…...

云和恩墨 zCloud 与华为云 GaussDB 完成兼容性互认证

近日&#xff0c;云和恩墨&#xff08;北京&#xff09;信息技术有限公司&#xff08;以下简称&#xff1a;云和恩墨&#xff09;的多元数据库智能管理平台 zCloud 与华为云计算技术有限公司&#xff08;以下简称&#xff1a;华为云&#xff09;的 GaussDB 数据库完成了兼容性互…...

【大语言模型LangChain】 ModelsIO OutputParsers详解

【大语言模型LangChain】 ModelsIO OutputParsers详解 一、简介二、OutputParsers 的优势三、解析器类型四、实战示例1、String 解析器2、Json 解析器3、Pydantic 解析器4、结构化输出解析器5、OpenAI 函数输出解析器5.1、JsonOutputFunctionsParser5.2、JsonKeyOutputFunction…...

PaddleSpeech本地部署文档

windows安装paddlespeech步骤&#xff1a; 1. 安装vs c编译环境 对于 Windows 系统&#xff0c;需要安装 Visual Studio 来完成 C 编译环境的安装。 Microsoft C Build Tools - Visual Studio 2. 安装conda conda create -y -p paddlespeech python3.8 conda activate pad…...

Android 第三方框架:RxJava:源码分析:责任链模式

文章目录 责任链模式RxJava中的责任链总结 责任链模式 RxJava中的责任链 链式调用的使用过程中形成了两个单向链表 第一个单向链表是Observable链表 它的形成过程&#xff1a; 1.首先调用Observable的静态方法创建第一个Observable对象&#xff0c;作为Observable链表的表…...

网络安全 与 加密算法

计算机中的网络安全 在本篇中介绍了以下几个方面: 机密性 密码学 对称加密算法(DES, 3DES, AES) 公开秘钥算法 RSA大素数的获取 完整性 散列函数(MD5, SHA-1, 并没有提及算法实现) 报文鉴别(MAC) 数字签名 端点鉴别 应用 SSL(TCP网络安全) 运行时安全 防火墙的基本知识 …...

UE4_贴花_贴花基础知识二

五、多表面投射 在本示例中&#xff0c;你将了解贴花如何在多个表面上进行投射。请注意&#xff0c;如果表面朝向与投射方向较为平行&#xff0c;贴花投射时必然会产生一些拉伸。另外&#xff0c;请记住&#xff0c;贴花可以在包括骨骼网格体在内的静态和动态网格体上进行投射。…...

ElasticSearch 搜索、排序、分页功能

一、DSL 查询文档 ElasticSearch 的查询依然是基于 json 风格的 DSL 来实现的。 官方文档&#xff1a;https://www.elastic.co/guide/en/elasticsearch/reference/8.15/query-dsl.html 1.1 DSL 查询分类 常见的查询类型包括&#xff1a; 查询所有&#xff1a;查询出所有数…...

MySQL-9.1.0 实现最基础的主从复制

目录 1 实验介绍 2 实验准备 2.1 创建目录为MySQL挂载使用 2.2 编写 docker-compose.yml 文件 2.3 启动容器 3 主从复制操作 3.1 MASTER 操作指令 3.2 SLAVE1 操作指令 3.3 SLAVE2 操作指令 4 验证是否实现主从 4.1 导入sql脚本查看是否正常主从复制 4.2 检验从库是否看见复制…...

Java中的“泛型“

泛型&#xff08;Generics&#xff09;是Java中的一种重要特性&#xff0c;它允许在定义类、接口和方法时使用类型参数&#xff08;type parameters&#xff09;。泛型的主要目的是提高代码的类型安全性和重用性。下面我将详细讲解Java中的泛型。 1. 泛型的基本概念 泛型允许我…...

前端(五)css属性

css属性 文章目录 css属性一、字体属性二、文本属性三、背景属性四、盒子模型 一、字体属性 font-weight&#xff1a;文字粗细&#xff0c;在100到900之间&#xff0c;normal(400),bord(700),inherit(继承父类) font-style&#xff1a;文字风格&#xff0c;normal表示正常(默认…...

总结拓展十七:SAP 采购订单行项目“交货“页签解析

《 SAP采购订单行项目“交货”页签字段解析》 在 SAP 系统的采购流程中&#xff0c;采购订单行项目的“交货”页签承载着关键的信息&#xff0c;其中的字段更是对整个交货环节的精准描述和把控的重要元素。理解和正确解析这些字段&#xff0c;对于确保采购流程的顺利进行、优化…...

分布式日志系统设计

一、分布式日志系统定义 分布式日志系统是一种用于收集、存储和分析大规模分布式系统日志的系统。它可以帮助开发人员和系统管理员实时监控和调试系统&#xff0c;提高系统可靠性和可用性&#xff0c;同时也可以用于日志分析和故障排查。 二、简单设计思路 日志收集&#xff…...

淘宝客必须做网站吗/百度官方网

- 试过重装MSVCR100.dll (无效而且由于版本不对引起了其他错误: 无法定位程序输入点1_NonReentrantPPLLockHolderdetailsConcurrencyQAEXZ与动态链接库msvcr100.dll上)&#xff0c;官方MSVCR win7&#xff0c;XP的dll下载地址&#xff1a;http://www.microsoft.com/zh-cn/down…...

wordpress网站迁移问题/爱站网站长seo综合查询

什么是拦截器 1.SpringMVC框架中的拦截器用于 对处理器 进行预处理和后处理的技术。 2.可以定义拦截器链&#xff0c;按照顺序执行。 3.拦截器和过滤器功能类似&#xff0c;区别在 拦截器过滤器过滤器是Servlet规范的一部分&#xff0c;任何框架都可以使用过滤技术。而拦截器是…...

wordpress 密码失败/深圳关键词推广

CSS3属性box-shadow使用详细教程 box-shadow&#xff1a;length length length length color length&#xff1a;阴影水平偏移值 length&#xff1a;阴影垂直偏移值 length&#xff1a;阴影模糊值 length&#xff1a;阴影边框 color&#xff1a;阴影颜色 说明&#xff1a;设置…...

展示型网站设计/游戏推广引流

大家都知道的是算法面试占比高&#xff0c;可现在系统设计面试也避无可避&#xff01; 有人问&#xff1a;不是SDE2才问系统设计&#xff0c;SDE1只考察OOD吗&#xff1f; 往年也许如此&#xff0c;但今年面试的小伙伴反馈&#xff1a;亚麻分别在三、四轮里出现OOD和系统设计…...

北京网站制作郑州/seo关键词推广多少钱

导语&#xff1a;考试周到来&#xff0c;大一新生如何备考&#xff0c;才能保证期末考试不挂科呢&#xff1f;无论是中学生还是大学生&#xff0c;每学期末&#xff0c;期末考试都是绕不过的话题。只不过这两的难度跟影响不同。中学时代的期末考试比较难&#xff0c;上课不认真…...

dede网站地图位置/关键词排名代发

2019独角兽企业重金招聘Python工程师标准>>> 其实微博是个好东西&#xff0c;关注一些技术博主之后&#xff0c;你不用再逛好多论坛了&#xff0c;因为一些很好的文章微博会告诉你&#xff0c;最近看到酷勤网推荐的一篇文章《30个提 高Web程序执行效率的好经验》&am…...