浅谈电商网络爬虫技术

news2024/12/23 0:03:47

摘    要

      目前网络上存在着海量的数据资料,将这些数据爬取保存下来,并进行进一步操作,即可挖掘出数据的潜在价值。如今的互联网存在的缺陷是用户很难获得有用的数据资料,虽然传统的搜索引擎可以为用户返回大量信息,但是用户需要在庞杂的数据中寻找对自己有用的信息。因此现如今越来越多的平台开始搭建属于自己的数据爬取系统,并在爬取的数据基础上展开服务。本文将会对网络爬虫技术进行概述,并阐述其基本原理。

进入以上API测试页面

一、网络爬虫技术概述

网络爬虫又叫网络蜘蛛、网络机器人等,可以将其理解为一个在互联网上自动提取网页信息并进行解析抓取的程序。网络爬虫不仅能够复制网页信息和下载音视频,还可以做到行为链执行与网站的模拟登录。身处大数据时代,不论是人工智能还是数据分析,都需要有海量的数据在背后做支撑,如果单单是依靠人力去手工采集,不仅成本高昂而且效率低下,在这一需求下,自动化且高效可并发执行的网络爬虫便担起了获取数据的重任。

二、网络爬虫基本原理

理论上来说,任何编程语言都可以用来编写网络爬虫,只有难易之分。因为网络爬虫本质上只是对目标服务器发起HTTP请求,并对HTTP响应做出处理,提取关键信息进行清洗入库。这里的服务器可以理解为要爬取的网站站点,爬虫程序发起一次HTTP请求,网站服务器对请求做出一次响应,就构成了一次网络爬虫行为,但是仅仅发起请求是不完整的,还需要将网站返回回来的信息进行数据解析和数据清洗,将最终需要的数据存储到数据库或是本地文件里才算是完成了一整套的爬虫流程。

如图1所示,完整的爬虫流程应当是编写的网络爬虫在发起请求之后,目标服务器返回指定的请求响应,通过对请求响应返回的响应体进行解析,找到需要的信息进行数据存储。如果需要翻页或者进行跳转,则从当前页面或者响应体中提取出链接再次发起请求。

图片

图 1 网络爬虫流程

通常来说,开发一个网络爬虫主要有两个途径,一个是根据请求包和解析包从头开始爬虫编写,另一个是基于现行的爬虫框架,进行框架化开发。

1.脚本编写爬虫

Python实现了许多第三方库来帮开发者完成这个操作,比如github上开源的requests库便是发起HTTP请求的利器,这就省去了实现请求程序的时间,bs4解析库更是让开发者只需要专注于网页信息的定位,操作网站返回的主体信息就可以了。开发重心也就从协议处理转化到了具体网页的数据提取。不过如果爬虫编写者是要对有着反爬虫措施的网站进行数据采集,则需要花费精力去应对反爬虫手段,诸如JavaScript逆向、代码混淆或者指纹风控之类的手段。

2.基于框架开发爬虫

如今流行的网络爬虫框架Scrapy,其基于异步Twisted引擎,将爬虫请求的每个阶段都进行了拆分,并建立了钩子能够让开发者在每一阶段进行定制化开发,可以大大加快网络爬虫的开发速度,并且其异步特性可以很好地实现并发爬取。

Scrapy框架模块化和程序化的编写方式,符合团队合作的风格,相较于脚本编写爬虫,更易于集体开发和维护。但缺点是需要进行第三方的拓展时不如直接进行脚本编写方便,如今的爬虫大多需要进行JS逆向、验证码识别之类的操作,外接其他编程语言进行开发,这需要对Scrapy有着深入了解才能做到程序稳定运行。

三、网络爬虫分类

实际开发中根据具体的代码实现与爬虫架构,网络爬虫可以被分为通用网络爬虫、聚焦网络爬虫、增量式网络爬虫与深层网络爬虫。

1.通用网络爬虫(General Purpose Web Crawler)

通用网络爬虫又叫全网爬虫,顾名思义,它的目标数据是整个互联网,爬取的数据极为丰富,因此常用于搜索引擎当中。它们往往从一些种子URL出发,辗转爬取最终拓展到整个网络。在爬虫流程里讲过,一个爬虫程序的设计离不开发起请求,解析页面和内容存储三个方面。既然要存储海量的互联网数据,那这类爬虫对于爬虫的性能和数据的存储空间就会具有高要求,而且因为URL数量过多,通用网络爬虫常常会忽略爬行页面的顺序,并且采取并发的模式来提高爬取速度。

正是因为它要爬取海量的数据,所以此类爬虫的爬取策略常常需要进行严格的设计与实践。就目前而言,深度优先爬取策略和广度优先爬取策略是较为常见的。不过真正应用于实践当中的通用网络爬虫策略往往会非常复杂,并且穿插各类算法在其中。

(1) 深度优先:按照页面深度进行排序,一次访问下一级URL,直到触底无法深入。

(2) 广度优先:按照页面内容目录层次进行划分,爬取完同一层次的URL才会继续进入下一层进行爬取。

2.聚焦网络爬虫(Focused Crawler)

聚焦网络爬虫更加适用于日常的爬虫需求,并不需要爬虫程序去获取整个互联网的资源,那是搜索引擎该做的事。它专注于某一主题,选择性爬取网页上与开发者已经定义的规则相匹配的数据资源,能够满足对于特定网站或者领域的信息爬取工作。

聚焦网络爬虫的爬取策略有4种:

(1) 基于内容评价:将用户输入的信息作为主题进行爬取,页面包含用户输入信息则认为主题相关。

(2) 基于链接评价:根据页面结构信息分析爬取的URL重要性,根据重要程度进行爬取优先级的排序。

(3) 基于增强学习:利用概率统计中的贝叶斯分类器,根据网页内容和链接文本对URL进行分类,计算出URL的权重,以决定爬取顺序。

(4) 基于语境图:结合机器学习系统,计算当前页面到相关的网页的距离,距离越近的页面的URL访问越优先。

3.增量式网络爬虫(Incremental Web Crawler)

增量式网络爬虫主要目的是长久地维持一个数据库,对于其中数据的稳健性和实时性具有高要求。简单来说,它对已经爬取过的网页页面采取增量式更新,再次爬取的时候就会仅仅爬取新出现的或者发生改变的数据,对于没有发生变化的页面或数据则不会爬取。

此类爬虫常用的策略有三:

(1) 统一更新:每隔一段时间将所有的页面再次访问一遍,以达到更新数据的目的。

(2) 个体更新:根据个体网站的数据变化频率来指定重新访问的时间。

(3) 分类更新:将网页区分为数据变化迅速的和数据变化缓慢的,以不同频率访问这两类网页。

4.深层网络爬虫(Deep Web Crawler)

深层网络主要指的是没办法直接访问到的页面,这类网页信息通常需要满足一定的要求才可以浏览,隐藏在一些表单之后,不能通过静态链接直接获取。例如日常生活中遇到的一些必须登录注册后才可以访问的网站便属于深层网络的范畴。这类爬虫的需求也极其旺盛,不过只需要搭配GET和POST请求便可以访问,主要难点在于破解POST提交信息时候的网页数据加密,即JavaScript加密参数。

四、网络爬虫与搜索引擎

首先,搜索引擎的制作离不开网络爬虫,如百度搜索引擎又叫作百度爬虫(BaiduSpider),谷歌搜索引擎又被称为谷歌机器人(Googlebot),而且通用网络爬虫有时候也可以用来指代搜索引擎,是否搜索引擎就是网络爬虫呢?答案是否定的。搜索引擎是一项综合性的技术,网络爬虫是实现搜索引擎的比必不可少的一环,爬虫只为搜索引擎提供数据,除此之外还有建立全文索引,进行倒排文件以及提供查询服务等技术糅合在里边。

除此之外,搜索引擎更关注的是大而全,为大多数用户提供检索服务,所以有些冷门的没有被列入索引的网站就没办法被实时获取到,而网络爬虫则可以通过个人定制,爬取一些搜索引擎关照不到的地方,典型的案例便是深层网络爬虫以及在robots.txt中明确禁止搜索引擎爬取的网站,而理论上开发者编写的网络爬虫可以到达世界上的任何网站。

虽然开发者日常编写的网络爬虫远不及搜索引擎那般复杂与精密,但是却能够让人了解到搜索引擎内部的工作原理。而且搜索引擎也可以看作是日常编写的一个个定向聚焦的网络爬虫聚合而来的,当搜索引擎没办法完成定向的数据搜集工作的时候,编写一个自己的网络爬虫就显得极为重要了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1550010.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL数据库(MySQL主从搭建|Django中实现MySQL读写分离|Django中使用MySQL连接池)

文章目录 一、MySQL主从搭建1.MySQL主从的目的?2.MySQL主从原理3.搭建步骤 二、Django中实现MySQL读写分离1.使用sqlite实现读写分离2.MySQL实现读写分离 三、Django中使用连接池1.使用池的目的2.Django中使用MySQL连接池 一、MySQL主从搭建 1.MySQL主从的目的&…

【vue3学习笔记(一)】vue3简介;使用vue-cli创建工程;使用vite创建工程;分析工程结构;安装开发者工具

尚硅谷Vue2.0Vue3.0全套教程丨vuejs从入门到精通 对应课程136-140节 课程 P136节 《vue3简介》笔记 课程 P137节 《使用vue-cli创建工程》笔记 官方文档: https://cli.vuejs.org/zh/guide/creating-a-project.html#vue-create官方文档地址 查看vue-cli版本&#x…

zotero+word优化管理参考文献

写论文,整理参考文献,管理参考文献很麻烦,参考文献格式罗列很麻烦,论文需要修改时,重新调整参考文献顺序很麻烦。 zoteroword可以很好的帮助解决这个问题。 Step1 zotero软件安装 默认word你已经安装好了 step2 安…

HWOD:九键输入法的转换

一、知识点 A的ASCII码是65,Z的ASCII码是90 a的ASCII码是97,z的ASCII码是122 从z到a的反循环,用26求余数 二、题目 1、描述 九键手机键盘上的数字与字母的对应: 1--1, abc--2, def--3, ghi--4, jkl--5, mno--6, …

ubuntu 中安装docker

1 资源地址 进入ubuntu官网下载Ubuntu23.04的版本的镜像 2 安装ubuntu 这里选择再Vmware上安装Ubuntu23.04.6 创建一个虚拟机,下一步下一步 注意虚拟机配置网络桥接,CD/DVD选择本地的镜像地址 开启此虚拟机,下一步下一步等待镜像安装。 3…

自动化面试常见算法题!

1、实现一个数字的反转,比如输入12345,输出54321 num 12345 num_str str(num) reversed_num_str num_str[::-1] reversed_num int(reversed_num_str) print(reversed_num) # 输出 54321代码解析:首先将输入的数字转换为字符串&#xff…

Tensorflow2.0笔记 - 使用compile,fit,evaluate,predict简化流程

本笔记主要用compile, fit, evalutate和predict来简化整体代码,使用这些高层API可以减少很多重复代码。具体内容请自行百度,本笔记基于FashionMnist的训练笔记,原始笔记如下: Tensorflow2.0笔记 - FashionMnist数据集训练-CSDN博…

六、保持长期高效的七个法则(二)Rules for Staying Productive Long-Term(2)

Rule #5 - If your work changes, your system should too. 准则五:如果你的工作变了,你的系统也应该改变。 For some, work will be consistent enough to not need major changes.You simply stick to the same system and you’ll get the results y…

PL/SQL概述

oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 PL/SQL概述 PL/SQL(Procedural Language extension to SQL)是 Oracle 对标准 SQL语言的扩充,是专门用于各种环境下对 Oracle 数据库进行访问和开发的语言。 由…

HWOD:对n个字符串按照字典序排序

一、知识点 1、pow函数 引用头文件math.h 求x的y次方 2、链接数学库 math.h头文件对应的库名称是libm sudo find / -name libm.so -print ls /usr/lib/x86_64-linux-gnu/ 链接命令:gcc xxx.c -L. -lm 3、52进制 A的ASCII码是65,Z的ASCII…

Ubuntu 配置 kubernetes 学习环境,让外部访问 dashboard

Ubuntu 配置 kubernetes 学习环境 一、安装 1. minikube 首先下载一下 minikube,这是一个单机版的 k8s,只需要有容器环境就可以轻松启动和学习 k8s。 首先你需要有Docker、QEMU、Hyperkit等其中之一的容器环境,以下使用 docker 进行。 对…

OpenCV模块熟悉:点云处理相关

1. 显示--VIZ 曾经基于PCL 做过不少点云相关的开发,采样VTK进行有点云显示。后来基于OpenCV做了不少三维重建工作,总是将点云保存下来,然后借助CloudCompare等查看结果。如果能够将VIZ编译进来,预计会提升开发速度。 …

aws 入门篇 02.区域和可用区

aws入门篇 02.Region和AZ 02.区域和可用区 区域(Region):us-east-1:美东1区可用区(Availability Zones) AWS的区域遍布世界各地 一个区域(Region)是由多个可用区(AZ&am…

从根本上优雅地解决 VSCode 中的 Python 模块导入问题

整体概述: 在我尝试运行 test_deal_file.py 时,我遇到了一个 ModuleNotFoundError 错误,Python告诉我找不到名为 controllers 的模块。这意味着我无法从 deal_file.py 中导入 read_excel 函数。 为了解决这个问题,我尝试了几种方法…

Sublime for Mac 使用插件Terminus

1. 快捷键打开命令面板 commandshiftp2. 选择 Package Control: Install Package,然后会出现安装包的列表 3. 在安装终端插件前,我们先装个汉化包,ChineseLocallization,安装完重启 4. 输入 terminus,选择第一个&am…

Pillow教程06:将图片中出现的黄色和红色,改成绿色

---------------Pillow教程集合--------------- Python项目18:使用Pillow模块,随机生成4位数的图片验证码 Python教程93:初识Pillow模块(创建Image对象查看属性图片的保存与缩放) Pillow教程02:图片的裁…

nvm安装以后,node -v npm 等命令提示不是内部或外部命令

因为有vue2和vue3项目多种,所以为了适应各类版本node,使用nvm管理多种node版本,但是当我按教程安装nvm以后,nvm安装以后,node -v npm 等命令提示不是内部或外部命令 首先nvm官网网址:https://github.com/coreybutler/…

iOS - Runtime-消息机制-objc_msgSend()

iOS - Runtime-消息机制-objc_msgSend() 前言 本章主要介绍消息机制-objc_msgSend的执行流程,分为消息发送、动态方法解析、消息转发三个阶段,每个阶段可以做什么。还介绍了super的本质是什么,如何调用的 1. objc_msgSend执行流程 OC中的…

接口自动化之 + Jenkins + Allure报告生成 + 企微消息通知推送

接口自动化之 Jenkins Allure报告生成 企微消息通知推送 在jenkins上部署好项目,构建成功后,希望可以把生成的报告,以及结果统计发送至企微。 效果图: 实现如下。 1、生成allure报告 a. 首先在Jenkins插件管理中&#x…

sqlite跨数据库复制表

1.方法1 要将 SQLite 数据库中的一个表复制到另一个数据库,您可以按照以下步骤操作: 备份原始表的SQL定义和数据: 使用 sqlite3 命令行工具或任何SQLite图形界面工具,您可以执行以下SQL命令来导出表的SQL定义和数据&#xff1a…