浅谈电商网络爬虫技术

摘    要

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

进入以上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.mzph.cn/news/775240.shtml

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

相关文章

react native 使用ScrollView实现下拉更新,上拉加载更多

在React Native中,要实现下拉更新和上拉加载更多的功能,你需要自定义ScrollView组件,监听滚动事件并根据滚动的位置来判断何时触发更新和加载更多的操作。以下是一个基本的实现思路: 监听滚动事件:使用ScrollView的on…

PyTorch----torch.nn.init.kaiming_normal_

神经网络为什么要进行权重初始化? 神经网络进行权重初始化的目的在于促进网络的有效训练和收敛。正确的权重初始化可以帮助缓解梯度消失或梯度爆炸等问题,并且有助于加速训练过程。以下是权重初始化的几个重要原因: 1. **避免梯度消失或梯度…

设计模式之组合模式解析

组合模式 1)概述 1.定义 组合多个对象形成树形结构以表示具有“整体—部分”关系的层次结构。 组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性,组合模式又称为“整体—部分”(…

2024-03-27 问AI: 介绍一下深度学习中的 Darknet

文心一言 在深度学习中,Darknet是一个开源的神经网络框架,由Joseph Redmon开发,主要用于实现深度学习算法。它以其高效的实现和速度受到广泛关注,并在许多计算机视觉竞赛中取得了优异的结果。 Darknet的特点包括: 轻…

学习java第二十五天

a. IOC和DI是什么 控制反转IoC是一种设计思想,而依赖注入DI(Dependency Injection)是IOC的一种实现方法。一般来说,对象的创建源自程序本身,而IoC反转了这种模式,将创建对象的控制转移给了第三方(用户)。这…

SpringBoot整合Redis:缓存击穿--互斥锁解决

🎉🎉欢迎光临,终于等到你啦🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟持续更新的专栏Redis实战与进阶 本专栏讲解Redis从原理到实践 …

数字时代的风向标:Facebook如何引领社交媒体的发展方向

引言 在当今数字时代,社交媒体已经成为人们生活中不可或缺的一部分,而Facebook作为其中的领军者,不仅影响着亿万用户的生活,也在塑造着整个社交媒体行业的发展方向。本文将深入探讨Facebook在数字时代的地位、影响力以及对社交媒…

3d放上模型为什么渲染不出来---模大狮模型网

如果在3D软件中放置模型后无法正确渲染出来,可能有几个常见的原因导致这种情况发生: 材质设置问题:确保所放置的模型具有正确的材质和纹理,并且材质设置正确。如果材质设置有误,可能会导致模型无法正确显示。 光照设置…

flink: 从pulsar中读取数据

一、依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0…

配置小程序的服务器域名

准备工作 拥有一个已注册的域名&#xff1a;确保您已经注册了一个符合国家和地区相关法律法规要求的域名。 完成域名备案&#xff08;如有必要&#xff09;&#xff1a;根据国家和地区的法律法规&#xff0c;某些情况下可能需要对域名进行备案才能用于互联网服务。 配置 DNS&…

Vue 二次封装组件的艺术与实践

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

备考ICA----Istio实验9---熔断Circuit Breaking 实验

备考ICA----Istio实验9—熔断Circuit Breaking 实验 1. 环境准备 创建httpbin环境 kubectl apply -f istio/samples/httpbin/httpbin.yaml kubectl get svc httpbin2. 创建测试用客户端 kubectl apply -f istio/samples/httpbin/sample-client/fortio-deploy.yaml3. 创建Ht…

python笔记进阶--模块、文件及IO操作(1)

目录 一&#xff0e;模块 1.模块的导入和使用 1.1导入整个模块 1.2导入函数 1.3使用as给模块指定别名 2.常见标准库 2.1 import random&#xff1a; 2.2 import math&#xff1a; 2.3正则表达式处理 2.4turtle 二&#xff0e;文件及IO操作 1.文件 1.1绝对路径与相…

Intellij IDEA 类注释模板设置

1、配置全局USER 在此配置全局USER&#xff0c;用于填充自动生成的注释中的作者author属性。 注释模板中的user参数是默认是获取系统的用户&#xff08;当然注释作者也可以直接写固定值&#xff09;&#xff0c;如果不想和系统用户用同一个信息&#xff0c;可以在IDEA中进行配…

【自我提升】一、Hyperledger Fabric 概念梳理

写在前面&#xff1a;最近因为业务需要&#xff0c;开始学习Hyperledger Fabric了&#xff0c;做java全栈工程师可真难搞。现在算是啥类型的都在涉及了&#xff0c;现在这个技术啥都不懂&#xff0c;就先开个学习专栏&#xff0c;记录记录。顺带也给各位道友参考参考。 目录 …

「媒体宣传」媒体邀约几种常见方法!-51媒体

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体邀约的常见方法确实包括电话邀约、邮件邀约、社交媒体邀约以及通过媒体公关公司代邀约等。 电话邀约&#xff1a;这是一种直接且高效的方式&#xff0c;可以通过电话与媒体记者沟通&…

HTTP请求走私!!!(一)

想都是问题&#xff0c;做才是答案 什么是请求走私&#xff1f; HTTP请求走私是针对于服务端处理一个或者多个接收http请求序列的方式&#xff0c;进行绕过安全机制&#xff0c;实施未授权访问一种攻击手段&#xff0c;获取敏感信息&#xff0c;并直接危害其他用户。 Web 应用…

【前端学习——css篇】4.px和rem的区别

https://github.com/febobo/web-interview 4.px和rem的区别 ①px px&#xff0c;表示像素&#xff0c;所谓像素就是呈现在我们显示器上的一个个小点&#xff0c;每个像素点都是大小等同的&#xff0c;所以像素为计量单位被分在了绝对长度单位中 有些人会把px认为是相对长度&…

大语言模型(LLM)token解读

1. 什么是token&#xff1f; 人们经常在谈论大模型时候&#xff0c;经常会谈到模型很大&#xff0c;我们也常常会看到一种说法&#xff1a; 参数会让我们了解神经网络的结构有多复杂&#xff0c;而token的大小会让我们知道有多少数据用于训练参数。 什么是token&#xff1f;比…

浅聊openGauss逻辑架构

浅聊 openGauss 逻辑架构 概述 openGauss 数据库是一款由华为主导、各个生态合作伙伴共同建设的开源关系型数据库管理系统&#xff0c;开源发行协议遵从木兰宽松许可证 v2。 openGauss 数据库源于 PostgreSQL-XC 项目&#xff0c;内核源于 Postgres 9.2.4&#xff0c;总代码…