技巧:使用Chrome快速实现数据的抓取(四)——优点
优采云 发布时间: 2022-09-23 10:13技巧:使用Chrome快速实现数据的抓取(四)——优点
一个爬取WEB页面的数据程序比较简单。大多数语言都有对应的HTTP库。一个简单的请求响应就足够了。程序向Web服务器发送一个Http请求,服务器返回一个HTML文件。交互如下:
使用 DevProtocol 驱动 Chrome 取数据时,交互过程如下图所示:
此时,Chrome充当了中间的代理,看起来比较复杂,但实际上对我们的爬虫程序帮助很大。本文简要总结了这种方法的优点如下。
获取动态生成的网页内容
现在很多网页的内容并不是直接通过初始Http请求获取,而是在返回的html页面中通过JS加载资源和计算动态生成的页面。采用这种方式的原因有很多,有的为了更好的用户体验,有的为了开发框架,有的为了节省带宽,有的只是为了对页面内容进行加密,从而实现反爬的功能。
不管是什么原因,它都会使简单的单一“请求-响应”交互过程复杂化。传统的一次*敏*感*词*互可以将所有请求完成成如下形式:
动态加载给传统数据造成了很大的障碍采集,但是往往需要分析页面加载过程,分析JS,在程序中嵌入一个JS引擎来模拟浏览器执行相应的脚本来获得最终数据。这是一个非常耗时耗力的过程,也不容易整体分析。
为了更容易解析此类动态网页,一些爬虫引擎开始引入Dom解析和JS执行能力,模拟浏览器解析获取相关资源。但是因为这个过程很复杂,所以这些功能往往不是很完善,坑很多。
现在,通过 Chrome 解析页面的方式是这种页面解析方式的集成版本。由于 Chrome 本身就是一个浏览器,所以它拥有完善的页面解析能力,可以如鱼得水。解析过程由chrome代理完成,我们只需要从chrome中获取最终的解析结果即可。
针对爬行动物的有效对策
最简单的反爬机制是检查HTTP请求的头部信息,包括User-Agent、Referer、Cookies等,根据手写的Http请求头部和常用的浏览器头部的区别反爬。这些可以非常有效地阻止初级爬虫,但 Chrome 本身是一个标准浏览器,天生就不受这种反爬虫机制的影响。
另一种反爬机制是上面提到的动态加载。根据上面的解释,这也是对 Chrome 天生免疫的。
当然,反爬的策略有很多,比如限制IP访问次数、限制访问频率、验证码等反爬。虽然 Chrome 不直接支持这些,但处理起来比传统的 Http 请求方便很多。后面会在文章中逐一介绍,这里就不一一展开了。
DOM 操作能力
Chrome 拥有完整的 Dom 操作能力。在 Chrome DevTools 控制台中可以进行的操作,基本上可以通过 DevProtocol 在程序中完成,为我们的 APP 增加了完善的 DOM 操作能力。许多以前需要分析 HTML 的数据现在都可以获取了。它是直接通过像 Jquery 这样的 js 函数来完成的。而且可以直接格式化成JSON输出,方便多了。
与服务器交互更容易
很多情况下,有些页面需要一些交互才能获取,比如登录。
由于 Chrome 具有 JS 执行能力,我们可以通过一些简单的 JS 脚本来非常轻松地执行它。比如花园的登录可以通过如下脚本实现:
$("#input1")[0].value = "userName";
$("#input2")[0].value = "密码";
$("#signin")[0].click();
有些网站需要验证码来防止爬虫,我们甚至可以结合chrome中的手动编码快速实现数据抓取。如果要开发一个支持接入编码平台或者智能识别平台的接口,比传统的爬虫程序要容易得多。
此外,Chrome还提供了非常丰富的API来模拟键盘和鼠标的输入界面,使用起来非常方便。
易于开发和调试
开发爬虫程序往往是一个反复调试的过程,因为我们直接解析Chrome获取的数据,而且Chrome DevTool本身就是一个强大的调试工具。这大大加快了我们的开发进程。
我们可以通过首先在 Chrome 中通过 DevTools 查看对我们页面的解析来验证通过控制台程序编写的脚本。大部分的脚本开发都可以用 Chrome 来完成,而这部分往往是不可复用的,需要花费大量时间。这相当于获得了一个强大的调试工具,可以节省大量时间。
此外,Chrome也是前端人员非常熟悉的工具。我们也可以将脚本开发的工作交给前端人员,他们可以更高效地开发脚本,大大提高开发效率。
缺点
说了这么多优点,最后还是说说它的缺点吧。这种方法的主要缺点是性能。
传统爬虫非常轻量级,是传统的tcp socket程序。它可以通过异步套接字轻松实现数千并发数,并且只加载需要的信息,性能非常高。
驱动chrome的方式是通过chrome获取服务器端的数据。一是加载了不必要的图片、样式、广告等文件,造成带宽浪费。此外,网页的渲染会导致 CPU 开销。虽然可以通过插件减少不必要的文件加载和无头来减少开销,但与传统的请求-响应方式相比,它仍然是一种重量级的获取方式。对于一个小规模的采集来说可能问题不大,但是如果你想以类似于搜索引擎的方式进行海量数据采集,可能就有点不知所措了。
参考文章:
操作方法:图解 | 通用搜索引擎背后的技术点
来源 | 后端技术指南针针头图 | 图虫
写在前面
今天和小伙伴一起学习一下通用搜索引擎的一些技术要点。
鉴于搜索引擎内容量大,每个部分都够写几篇文章的文章了,所以这篇文章只是一个指南,深挖还得由老手来做。
通过本文,您将对通用搜索引擎的基本原理和组成部分有一个更清晰的认识。仔细阅读后,你一定会有所收获!
大家不要废话了,赶紧上车吧!
了解搜索引擎
2.1 搜索引擎分类
搜索引擎根据使用场景和规模可以简单分为两类:
通用搜索又称大搜索,如谷歌、百度、搜狗、神马等都属于这一类。
垂直搜索又称垂直搜索,是在特定领域的搜索,比如用QQ音乐搜索周杰伦的歌曲。
两类搜索引擎的数据规模和数据特征虽然不同,但都旨在弥合用户与海量信息之间的鸿沟。
2.2 搜索和推荐
搜索和推荐经常被比较,但两者之间存在一些差异和联系。
2.3 搜索引擎评估标准
我们每天都在和搜索引擎打交道,评价一个搜索引擎的好坏可以简单概括为:准确性、及时性、响应速度、权威性等。
换句话说,搜索引擎了解用户真正在寻找什么,并且可以快速准确地显示出来。还可以收录及时展示一些热点和突发信息,从而很好的赢得用户。
这个目标需要搜索引擎多个模块的协同处理,是一项复杂的系统工程,并非易事。
常见搜索引擎的总体概述
3.1 搜索引擎的基本流程
大白试图用简单的语言来表达一般搜索引擎的大致工作原理:
1.网络蜘蛛每天孜孜不倦地对收录网页进行工作,然后进行存储,使每个站点的页面都有一个镜像,规模达到百亿/千亿。
2. 单纯镜像不能直接使用。需要对其进行处理,切分成词,建立搜索词与网页的对应关系,这样用户在搜索某物时,就会得到很多相关的网页。
3. 比如“搜索隐藏的角落”可能找到100个相关网页,但是网页和搜索词之间的相关性必须强或弱,所以需要对网页进行排序,而且有很多排序策略。将优质网页放在最前面,向用户展示。
用户看到相关结果后,点击或跳过,搜索引擎根据用户的相关动作进行调整,实现整个闭环流程。
4.为了更好地理解用户的真实目的,需要了解搜索词的意图,分割词条,替换同义词,纠正语法错误,然后根据这些搜索词获取数据,找到记住网页。
例如,如果搜索词是“Eagle”,它可能是自然界中的老鹰,也可能是 NBA 中的一支球队:
3.2 搜索引擎的基本组件
我们先简单看一下各个模块的基本组成和主要功能:
接下来,我们将简要介绍几个模块的基本内容和技术点。
网络爬虫模块介绍
网络爬虫模块是通用搜索引擎的一个非常基本的组件。一般由分布式爬虫实现。下面我们来看看这个搬运工是如何实现海量网页发现的:
网络爬虫的基本流程:
爬取过程中有多种遍历策略:深度优先遍历DFS、广度优先遍历BFS、部分PageRank策略、OPIC在线页面重要性计算策略、大站点优先策略等。
在工程实践中,需要根据自身情况和搜索引擎的特点,选择某种策略或策略组合。
网络爬虫需要遵循Robots协议(网络爬虫排除标准),这是网络爬虫和网站之间的君子协定,网站通过协议告诉网络爬虫什么可以被抓,什么不能。
同时,网络爬虫需要考虑爬取的频率,防止网站负担过重。简而言之,搜索引擎的网络爬虫需要适度。
网页内容处理模块
爬虫模块存储网页内容后,网页内存处理模块开始解析网页内容。主要任务包括:数据清洗、网页内容分词、建立正向索引、建立倒排索引等。
5.1 数据清洗
一般来说,除了具体的内容外,网页中还会有很多不相关的东西,比如html标签、推广等,在实际的搜索引擎中是没用的。
内容处理模块会清理无用的数据和标签,为后续的分词做准备。
5.2 中文分词
清洗后的内容是通过分词关键词提取出来的,比如一个网页收录1000个词,分词后大约有50个词,相当于提取了网页的主干,会分析标题,摘要、正文和正文的其他部分。内容以不同的权重处理。
在分词过程中,会去除停用词、功能词等,如“的、得、地”,从而还原网页的主要内容。
我们使用一个在线网页分割工具和一个真实网页来模拟这个过程:网页分割在线工具:
爬网:
可以看出,分词后可以标注词频。这些都是后续网页排名的重要来源,但是中文非常复杂,所以分词算法有很多,常见的有:
5.3 正索引
假设我们对每个网页的docid进行唯一的编号,经过前面的分词,一个网页会被分成多个不同权重的实体词。
所谓正排名,是指所有属于该网页的内容都可以根据docid获得。这是一个符合我们思想的积极过程。相对而言,会有倒排索引。
我们以《隐秘的角落》剧情介绍的一页为例,模拟分词的情况,大致如下(本次分词结果纯属脑补,以实际为准):
5.4 倒排索引
假设我们已经分割了10000个网页,其中收录一些公共搜索词:微山湖、智取虎山、三十站立、隐藏的角落等,那么我们将在汇总关系后建立一个搜索词->网页映射。
那么,对于搜索词“隐藏的角落”,有很多网页,倒排索引相当于从一个词中可以拉出多少个文章的过程。
就像我们提到食物一样,我们认为:火锅、烧烤、烤鸭、炒菜等,是一个从点到面的过程,而这个逆向过程在搜索引擎中非常重要。
5.5 章节摘要
内容处理模块对抓取的网页进行清洗,提前将新的URL提供给爬虫模块,对内容进行分段,建立正向索引和倒排索引,是链接前后的中间链接。
尤其是提到正向索引和倒排索引并不直观。其实原因不难理解:转发索引:有多少关键词具体到一个网页,具体是指页面本身的一个内容的集合,也就是一个网页。倒排索引:一个搜索关键词对应多少个相关网页,即替代网页的集合,是网页的一种。
页面排序和用户模块
6.1 需要页面排序
由于存储的网页数以百亿计,那么一个搜索词可能涉及数万、数十万甚至更多的相关网页。
网页排名需要综合考虑:相关性、权威性、及时性、丰富性等方面。
搜索引擎要向用户展示高质量且相关性强的网页,并将其放在首位,否则搜索效果会很差,用户不会购买。
事实上,情况也是如此。例如,搜索引擎返回 10 页结果,每页 10 个,以及 100 个摘要。一般用户不会点击1-3页之后的页面,所以排序好的header内容对于搜索来说非常重要。结果很重要。
我们还是以“隐藏角落”的检索为例。百度一共返回了10页,其中1-2页是强相关的,算是比较好的检索结果:
6.2 常见的页面排序策略
网页排名策略是一个不断优化和改进的演进过程。我们来看看排名策略:
这是早期搜索引擎经常采用的方法,相对简单但效果很好。
简单来说,排名是根据关键词在网页中出现的频率和位置,因为一般认为搜索词出现的次数越多,位置越重要,网页的相关性和排名越高。词频不仅仅是次数的计数。它需要一个全局的概念来判断关键词的相对频率。这就是我们要讲的TF-IDF逆文档频率。我们来看看百度百科的解释:TF-IDF(词频-逆文档频率)是一种常用的信息检索和数据挖掘的加权技术。TF 是词频,IDF 是逆文档频率。TF-IDF 是一种统计方法,用于评估单词对文档集或语料库中的一个文档的重要性。一个词的重要性与它在文档中出现的次数成正比,但与它在语料库中出现的频率成反比。举个栗子:
“吃”这个词在网页上出现了10次,虽然很多,但是“吃”这个词太常见了,因为它出现在很多其他网页中,所以搜索词“吃”的重要性相对降低了。
链接分析排名认为,一个网页被其他网页引用的次数越多或被引用的权威网页越多,该网页的质量就越高。
基于链接分析的排名算法有很多,其中最著名的PageRank算法被Google广泛使用,是其核心排名算法。
我们来看看PageRank算法的基本思想:一个网页的重要性是通过PageRank值来衡量的,而一个网页的PageRank值体现在两个方面:引用该页面的其他页面的数量页面以及引用该页面的其他页面的重要性。假设一个网页A被另一个网页B引用,网页B给网页B所引用的网页分配一个PageRank值,所以对网页A的引用越多,其PageRank值就越高。另外,网页B越重要,它所引用的页面可以分配的PageRank值越多,网页A的PageRank值越高,越重要。其实这个算法说起来很简单:比如写公众号的时候,大V转载就相当于引用。
PageRank算法也存在一定的问题。比如对新页面不友好,新页面暂时没有被大量引用,所以PageRank值很低,而PageRank算法强调页面之间的引用关系,可能付出的还不够注意页面本身的主题内容。,也就是所谓的话题漂移问题。
与PageRank算法类似,还有一些其他算法可以弥补主题关联问题,包括:HillTop算法、Topic-Sensitive PageRank算法、HITS算法等,本文不再展开。
6.3 网页反作弊和SEO
搜索引擎也有28的原则。头部的网页占了很大的点击量,这也意味着巨大的商业价值。
在这里,我们将提到SEO。我们先来看看百度百科对SEO的定义: 搜索引擎优化,也称SEO,是搜索引擎优化,是通过分析搜索引擎的排名规则来了解各种搜索引擎是如何搜索的。,如何抓取 Internet 页面的技术,以及如何对特定 关键词 的搜索结果进行排名。搜索引擎利用搜索者容易引用的方法,有针对性地优化网站,提高网站在搜索引擎中的自然排名,吸引更多用户访问网站,提高网站的流量,提高网站的销售能力和宣传能力,从而提升网站的品牌效应。道高一尺,魔高十尺,唯有魔能胜魔。
网页反作弊是搜索引擎需要解决的一个重要问题。常见的包括内容反作弊和链接分析反作弊。
6.4 用户搜索意图理解
用户模块直接与用户交互,接收用户的搜索词,准确理解用户的搜索意图。
事实上,用户的输入是多种多样的,口语化的,甚至是拼写错误的,不同背景的用户对同一个搜索词有不同的需求,使用无争议搜索词的目的也不同。
全文摘要
搜索引擎是一个非常复杂的系统工程,涉及到很多算法和工程实现。本文旨在和大家一起简单梳理一下搜索引擎的基本组成和运行原理。这是一门科普文章。
搜索引擎中的每一个模块都不容易做好,也是互联网产品技术含金量的典型代表。深入研究一个模块将受益匪浅。
<p class="js_darkmode__17" style="margin: 15px 8px;color: rgb(73, 73, 73);white-space: normal;font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;font-size: 11pt;line-height: 1.75em;">更多精彩推荐</p>
☞停滞数年后,ElasticJob 携首个 Apache 版本 3.0.0-alpha 回归!☞写不出满分作文怎么办,GPT-3 来帮你☞互联网不相信学渣☞收藏!美国博士明确给出Python的高效学习技巧☞垃圾回收策略和算法,看这篇就够了☞2020 以太坊技术及应用大会·中国圆满落幕,大咖们的演讲精华都在这里了!点分享点点赞点在看