如何实现网页JavaScript解析系统的作用和影响?-八维教育
优采云 发布时间: 2021-06-14 22:29如何实现网页JavaScript解析系统的作用和影响?-八维教育
长期以来,网站站长都选择使用 JavaScript 来实现网页的动态行为。造成这种情况的原因是多方面的,比如加快页面响应速度、减少网站流量、隐藏链接或嵌入广告。由于早期的搜索引擎不具备相应的处理能力,因此在对此类网页进行索引时经常会出现问题。 收录的宝贵资源可能得不到,也可能发生作弊。
引入JavaScript优化的目的就是为了解决以上两个问题,结果是让搜索引擎更清楚地了解用户在实际打开网页时看到的效果。比如有些网站会从网页的HTML中提取用户评论、评分等信息,在打开页面时使用JavaScript甚至AJAX动态显示页面。早期搜索引擎此时可以处理的页面内容缺失。 ,会进一步影响页面索引值的判断。
引入JavaScript解析,需要考虑其自身的设计与实现、解析速度等影响系统的因素。本文通过一些典型案例来分析如何设计和实现一个网页JavaScript解析系统,并简要介绍这个系统对搜索引擎其他部分的作用和影响。
一、发现页面链接
一般来说,页面链接在HTML中都是以A标签的形式,链接URL是在href属性中标注的,但其实也有一些网站会选择更“动态”的方式,更常见的方式有两种:一种是动态写入或调整A标签,另一种是在用户点击时触发事件改变默认链接打开方式。
1.动态写入或调整链接标签
抽象地说,实现这个效果的网页,甚至后面介绍的其他效果,都非常类似于把大象放进冰箱,分为三个步骤:找到要写入/修改的目标(找到大象),准备好要写入/修改的内容(打开冰箱门),执行写入/修改(放入)。
这三步操作映射到JavaScript,就是依次调用三个标准的浏览器功能:页面元素定位、数据准备、页面修改。那么,JavaScript解析的工作就是也提供这样一个功能,自然而然的找到站长的JavaScript代码调用的相应内容和行为。
分析到此,需要实现的功能基本确定了,比较简单的有:
document.getElementById // 定位
document.getElementsByTagName // 定位
document.getElementsByClassName // 定位
node.[firstChild/nextSibling/previousSibling/parentNode] // 定位
document.[createElement/createTextNode] // 创建链接
node.[appendChild/insertBefore/innerHTML=?] // 写入内容
element.getAttribute, element.setAttribute // 设置属性
element.href =? // 设置属性
至于要写入的内容,可能以数组等形式存储在JavaScript中,也可能使用AJAX动态加载。前者是JavaScript语言的内置函数,这里不再赘述;后者是一个单独的话题,稍后会讨论。
2.点击时触发事件改变默认链接打开方式
此页面有不同的原因。有些是为了隐藏链接,有些是为了实现弹出窗口,有些是为了编写 URL,有些是为了检查链接是否应该打开,等等。但所有这些原因都对应同一个实现方法:添加一个点击事件。
添加点击事件的三种方式:
1.将A标签的href属性设置为“javascript:func(...)”的形式
2.设置A标签的onclick属性,设置为onclick="js_code"的形式
3.调用事件绑定函数,如my_link_node.addEventListener('click', func, false)
支持这三种方式本身就比较简单。需要注意的是如何触发这样的点击事件,触发后如何拦截目标网址。
对于触发事件,需要先采集所有可能的点击事件,然后依次触发。但是对于每次触发的点击,在实际触发之前必须先检查是否还存在,因为之前的点击事件可能已经删除了当前的点击。
要拦截URL,首先要实现相关的页面跳转功能,即location.href = ?, window.open等,然后通过设置一系列标志,将点击与页面跳转连接起来,所以获取目标网址。
二、动态页面内容
页面动态内容是提高页面加载速度和增强网站技术灵活性的一种手段。可以将会发生变化的内容(如评论、评分等)分开,使页面可以分为静态和动态部分:静态内容可以使用缓存等方法来加快页面显示速度,减少网站流量动态内容的优点是格式简单,生成性好,还可以节省流量。
另一方面,动态内容也是加载广告和内容作弊的重要手段。最常用的方法就是写iframe,这对于早期的搜索引擎来说是非常隐蔽的。
在技术层面,动态页面内容所需的工作与上一节“动态编写或调整A标签”大致相同。这里需要添加的是经典的“document.write”方法。 .
该方法是最早的JavaScript函数之一,用于直接向页面写入一段HTML代码,至今仍被广泛使用。对于这种方式,早期的搜索引擎已经支持了,但是该方式基本上仅限于字符匹配,只能支持最直接的写JavaScript字符串的方式,对于稍微复杂的文本拼接是无能为力的。但是对于JavaScript分析来说,这段代码毕竟要符合语言规范,才能完全支持处理文本拼接、条件判断、代码混淆等各种情况。
这里需要讨论的一点是嵌套的document.write,就是通过document.write写一个SCRIPT标签,标签里面是另外一段document.write。这种问题在跳转秘籍中并不少见。它的支持不仅需要JavaScript解析,还需要HTML解析器支持内嵌的HTML编写功能,这里不做分析。
通过上述方法,无论是网页的主要信息,还是广告或其他辅助信息,都会被曝光,以便更好地了解站长的意图。
三、网页跳转
网页跳转在某些情况下是实现页面效果的必要选择,但也可以用来作弊。从技术上讲,它以以下两种方式出现:
1.直接调用页面跳转函数
2.为搜索引擎UA、Referer等调用页面跳转功能
这里要实现识别,核心就是实现页面跳转功能:位置对象。由于这是技术上唯一的JavaScript跳转函数,因此无论页面的JavaScript如何编写或混淆,最终都会调用该函数。因此,虽然不同页面的跳转代码看似多种多样,但很容易识别。
四、关于 AJAX
AJAX 是一种非常常见的网络技术。基本上,网页显示时,是从互联网上动态获取一段数据(可能是HTML或其他),经过处理后显示出来。
对于这项技术,根本的工作不在于XMLHttpRequest对象的实现,而在于对搜索引擎爬虫架构的影响。众所周知,爬虫的设计形式是抓取页面,遍历其链接,然后依次抓取。其工作主要集中在调度和控制爬行压力。爬虫本身比较简单,通常不具备爬完后立即执行JavaScript的能力。能够捕获 AJAX 数据,因此需要进行技术升级以支持 AJAX。
爬虫的分析超出了本文的范围,感兴趣的读者可以查看其他相关文献。
总结
通过前面的案例分析,我们总结了实现JavaScript解析所需的基本工作。另外,加入一定数量的基础建设,可以形成一个比较完整的体系。这里我们再整理一下,分成三部分:
1.在HTML解析器中嵌入JavaScript语言引擎,语言引擎可选择V8、SpiderMonkey等成熟的开源方案。
2. 实现需要的功能。具体请参考W3C的相关HTML和DOM规范。
3. 作为直接推论,收录 需要所谓的.js 文件,这是JavaScript 解析所需的“分析”的源代码。
本文介绍的函数只是一些比较常见的 JavaScript 函数。搜索引擎要真正看到实际页面,还需要进一步实现其他所需的功能。此外,还需要配合HTML、CSS、图片等资源。待命。
最后,对于想使用 JavaScript 的站长,本文给出以下建议:
1.不要使用过于复杂的JavaScript技术,不利于搜索引擎收录
2. 不要在.js 文件上屏蔽收录,否则会限制JavaScript 解析能力
3.合理划分网站静态部分和动态部分