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

爬虫工作量由小到大的思维转变---<第十二章 Scrapy之sql存储与爬虫高效性的平衡艺术>

前言:

(本文仅属于技术性探讨,不属于教文)

刚好,前阵子团队还在闲聊这个问题呢。你知道吗,在数据收集这个行当里,怎么存数据这问题就跟“先有鸡还是先有蓝”一样,没完没了的循环往复。老规矩,咱们先搞清楚我们的“鸡”是啥,然后再刨根问底到底该怎么孵这个“蛋”。


说到底,爬虫这货其实就和拉货的卡车司机没两样。要做的事儿其实就是把货物——这里指的是数据——从A地搬到B地,一路上还得保证数据这货不掉链子。听着挺简单的吧?但实际上,这过程中牵扯的细节和难点也不比开大卡车简单多少。


每次拉一车数据回来,心里最闹心的就是这些数据怎么处理。先清洗再存,感觉就像是把货物过一道质检;直接存,又怕到时候取起来麻烦;加点逻辑处理,又担心效率慢上不少。这得取舍之间,痛苦无比啊。


但是,时间不等人,特别是爬虫这一行,快是王道。你在那儿犹豫,咱们对手可是横着刷数据走了。

正文:

------在这种压力下,你得优先考虑的是效率和完整性。如果处理得慢腾腾的,效率就没了;数据弄丢了,完整性也跟着没了。那怎么办?得找个两全其美的方案。

如今最火的爬虫框架Scrapy,抓数据挺利索,但到了处理item,特别是存储环节,就开起了倒车。它在pipeline里处理数据是同步的,跟它那异步抓取的节奏严重不符。一旦数据一多,特别是涉及多张表,你那存储的效率就得打大大的折扣。


这不,我就被这事儿给卡住过。拉回来的数据多得吓人,想着要是按Scrapy的节奏来,这存储效率能低到家了。用同步的方式慢吞吞地存,那爬虫的速度优势不就成了纸老虎吗?深思熟虑后,决定,把握住快和标准这两个关键词。


我摸索出了一套新的方案:用aiomysql这样的异步数据库连接库。别看这异步两字,它可真是里面的玄机所在。它让我们在存储item时也能走上异步的快车道。咱们pipeline虽是单线程,但利用aiomysql可以同时进行多个数据写入操作,大大提升了数据存储的效率。


可能你会问,那这样改来改去,值得吗?我告诉你,太值了!那速度就像火箭,嗖嗖的。尤其是对于我们这种数据量巨大、必须跟时间赛跑的项目来说,秒就是金钱,效率就是生命。再说了,技术不就是用来解决问题的吗?既然有更优的选择,岂不是傻子不用?


不过,这技术上的升级只是解决问题的一部分。这其中还牵扯到了一个更深层次的话题——数据库的设计和优化。没错,咱们将数据从网页上抓下来,整得利利索索存到数据库里是第一步。但别忘了,设计一个既能承受高并发又高效利用资源的数据库结构才是咱笔挺爬虫后续要面对的大挑战。


说到库的结构,得变着法儿想。表设计得规范、关系搭配得和谐、索引建得当,这可都是技术活儿。要知道,一次次的查询和更新可能对数据库的性能影响特别大。咱们得利用各种数据库性能优化技术,比如缓存策略、慢查询优化、读写分离,甚至是对热点数据的分布式存储。这样一来,这批爬下来的宝贵货物能被妥善地利用起来,为下个环节——数据分析和挖掘打下坚实的基础。


其实,技术上的这些操作和提升,都是为了事情能往前走。咱们像是在铺路,让收集来的数据能够存储得当,又能供未来的分析师们发掘价值。毕竟,数据本身没意义,意义在于咱们如何去使用这数据。


最终,这一切的一切,从爬虫硬拉数据,到高效存库,再到数据的进一步提炼和分析,都是串起来的,一个依赖于另一个。在这个过程中,任何一个环节的弱点,都可能成为数据流转的瓶颈。咱这爬虫工程师可不仅仅是个普通的司机,咱们更是个协调者,要确保这每一步都在最佳状态。


这就是爬虫和数据库存储的千丝万缕的联系,硬件、软件、技术和策略,它们共同为了一个目标而打拼——让数据变得有价值。没了这些,那些网上的数据就像散落一地的珍珠,得不到妥善的收集和整理,它们的光彩也就照不到哪儿去了。


所以,下次你在写爬虫的时候,别只想着怎么把数据抓下来,也要多想想后面这些事儿。越是早打算,到后头越是省心。这个行业的精髓就在于此——预见未来,在现在的基础上找到答案。

相关文章:

爬虫工作量由小到大的思维转变---<第十二章 Scrapy之sql存储与爬虫高效性的平衡艺术>

前言: (本文仅属于技术性探讨,不属于教文) 刚好,前阵子团队还在闲聊这个问题呢。你知道吗,在数据收集这个行当里,怎么存数据这问题就跟“先有鸡还是先有蓝”一样,没完没了的循环往复。老规矩,咱们先搞清楚我们的“鸡…...

修改Docker0和容器的地址

修改Docker0和容器的地址 1. 需求 默认服务器安装完Docker-ce后会给docker0分配172.17.0.1/16地址. 公司新接入一个网段正好与172.17.0.1/16冲突,此时访问这台服务器的容器时就会发生网络不可达. 2. 解决方法 修改/etc/docker/daemon.json 加入一个自定义网段 vim /etc/d…...

弹性网络优化算法

3.3、Elastic-Net算法使用 这是scikit-learn官网给出的弹性网络回归的,损失函数公式,注意,它用的矩阵表示,里面用到范数运算。 min ⁡ w 1 2 n samples ∣ ∣ X w − y ∣ ∣ 2 2 α ρ ∣ ∣ w ∣ ∣ 1 α ( 1 − ρ ) 2 ∣ ∣…...

[C语言]大小端及整形输出问题

假设在一个32位little endian 的机器上运行下面的程序&#xff0c;结果是多少 ? 1.1先看以下三个程序 #include <stdio.h> int main() {long long a 1, b 2, c 3;printf("%lld %lld %lld\n", a, b, c); // 1 2 3printf("%d %d %d %d %d %d\n&quo…...

C# 命令行参数解析库示例

写在前面 在日常开发中&#xff0c;我们经常会用到命令行参数&#xff0c;比如cmd下的各种指令&#xff1b;还有C#的控制台类型的项目&#xff0c;在默认入口Main函数中&#xff0c;那个args参数&#xff0c;就是有系统传入到程序进程的命令行参数&#xff1b;在传入的参数相对…...

2020 年网络安全应急响应分析报告

2020 年全年奇安信集团安服团队共参与和处置了全国范围内 660起网络安全应急响应事件。2020 年全年应急响应处置事件行业 TOP3 分别为:政府部门行业(146 起)医疗卫生行业(90 起)以及事业单位(61 起&#xff0c;事件处置数分别占应急处置所有行业的 22.1%、13.6%、9.2%。2020 年…...

Git----学习Git第一步基于 Windows 10 系统和 CentOS7 系统安装 Git

查看原文 文章目录 基于 Windows 10 系统安装 Git 客户端基于 CentOS7 系统安装部署 Git 基于 Windows 10 系统安装 Git 客户端 &#xff08;1&#xff09;打开 git官网 &#xff0c;点击【windows】 &#xff08;2&#xff09;根据自己的电脑选择安装&#xff0c;目前一般w…...

爬虫 scrapy ——scrapy shell调试及下载当当网数据(十一)

目录 一、scrapy shell 1.什么是scrapy shell&#xff1f; 2.安装 ipython 3.使用scrapy shell 二、当当网案例 1.在items.py中定义数据结构 2.在dang.py中解析数据 3.使用pipeline保存 4.多条管道的使用 5.多页下载 参考 一、scrapy shell 1.什么是scrapy shell&am…...

Linux驱动(中断、异步通知):红外对射,并在Qt StatusBus使用指示灯进行显示

本文工作&#xff1a; 1、Linux驱动与应用程序编写&#xff1a;使用了设备树、中断、异步通知知识点&#xff0c;实现了红外对射状态的异步信息提醒。 2、QT程序编写&#xff1a;自定义了一个“文本指示灯”类&#xff0c;并放置在QMainWidget的StatusBus中。 3、C与C混合编程与…...

echarts地图的常见用法:基本使用、区域颜色分级、水波动画、区域轮播、给地图添加背景图片和图标、3d地图、飞线图

前言 最近几天用echarts做中国地图&#xff0c;就把以前写的demo&#xff1a;在vue中实现中国地图 拿来用&#xff0c;结果到项目里直接报错了&#xff0c;后来发现是因为版本的问题&#xff0c;没办法只能从头进行踩坑了。以下内容基于vue3 和 echarts 5.32 基本使用 获取地…...

进程间通讯-管道

介绍 管道&#xff08;Pipe&#xff09;是操作系统提供的一种进程间通信&#xff08;IPC&#xff0c;Inter-Process Communication&#xff09;机制&#xff0c;它允许一个进程的输出直接作为另一个进程的输入。管道主要分为以下两种类型&#xff1a; 无名管道&#xff08;Unn…...

项目总结-自主HTTP实现

终于是写完了&#xff0c;花费了2周时间&#xff0c;一点一点看&#xff0c;还没有扩展&#xff0c;但是基本功能是已经实现了。利用的是Tcp为网络链接&#xff0c;在其上面又写了http的壳。没有使用epoll&#xff0c;多路转接难度比较高&#xff0c;以后有机会再写&#xff0c…...

Java语言+二维数组+非递归实现五子棋游戏

以前做过一个C语言版五子棋&#xff1a;&#xff23;语言&#xff0b;二维数组&#xff0b;非递归实现五子棋游戏 现在做一个Java语言版五子棋&#xff0c;规则如下&#xff1a; 1&#xff64;白子为O; 2&#xff64;黑子为&#xff1b; 3&#xff64;白子先手&#xff1b;…...

WordCloud—— 词云

【说明】文章内容来自《机器学习入门——基于sklearn》&#xff0c;用于学习记录。若有争议联系删除。 wordcloud 是python的第三方库&#xff0c;称为词云&#xff0c;也成文字云&#xff0c;可以根据文本中的词频以直观和艺术化的形式展示文本中词语的重要性。 依赖于pillow …...

linux网络----UDP编程

一、函数接口: 1.socket:创建一个用来网络通信的终端节点&#xff1b; 参数: type&#xff1a;套接字类型 SOCK_STREAM 流式套接字 TCP SOCK_DGRAM 数据报套接字 UDP SOCK_RAM 原始套接字 domain: 协议族 AF_INET protocal: 默认为0 2.s…...

[AI工具推荐]AiRestful智能API代码生成

智能API代码示例生成工具AiRestful 一、产品介绍二、如何使用1、第一步(必须):2、第二步(可选):3、第三步(智能生成): 三、如何集成到您的网站(应用)1、开始接入2、接入案例 四、注意点 一、产品介绍 AiRestful是一款基于智能AI的,帮助小白快速生成任意编程语言的API接口调用示…...

Elasticsearch 8.10.0同义词API用法详解,支持同义词热更新

Elasticsearch 的同义词功能非常强大,如果使用得当,可以显着提高搜索引擎的效果。使用同义词功能时的一个常见问题是更新同义词集。 同义词在搜索引擎领域用途 同义词在搜索引擎领域的用途可概括如下: 增强搜索的准确性——当用户输入一个关键词时,可能与他们实际意图相关…...

深度学习之模型权重

在深度学习中&#xff0c;模型的权重&#xff08;weights&#xff09;是指神经网络中的参数&#xff0c;这些参数用于调整和学习模型的行为&#xff0c;以便能够对输入数据进行有效的映射和提取有用的特征。深度学习模型通常由许多神经元和连接组成&#xff0c;而权重就是连接这…...

纯前端使用XLSX导出excel表格

1 单个sheet page.js(页面中的导出方法) import { exportExcel } from ../../../utils/exportExcel.js; leadOut() {const arr [{ id: 1, name: 张三, age: 14, sex: 男 },{ id: 2, name: 李四, age: 15, sex: 女 },{ id: 3, name: 王五, age: 16, sex: 男 },];const allR…...

将mjpg格式数转化成opencv Mat格式

该博客可以解决如下两个问题&#xff1a; 1、将mjpg格式数据转化成opencv Mat格式 2、v4l2_buffer 格式获取的mjpg格式数据转换成Mat格式。 要将 MJPEG 格式的数据转换为 OpenCV 的 Mat 格式&#xff0c;您可以使用 imdecode 函数。imdecode 函数可以将图像数据解码为 Mat 对象…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

从零开始了解数据采集(二十八)——制造业数字孪生

近年来&#xff0c;我国的工业领域正经历一场前所未有的数字化变革&#xff0c;从“双碳目标”到工业互联网平台的推广&#xff0c;国家政策和市场需求共同推动了制造业的升级。在这场变革中&#xff0c;数字孪生技术成为备受关注的关键工具&#xff0c;它不仅让企业“看见”设…...

JS红宝书笔记 - 3.3 变量

要定义变量&#xff0c;可以使用var操作符&#xff0c;后跟变量名 ES实现变量初始化&#xff0c;因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符&#xff0c;可以创建一个全局变量 如果需要定义…...