文档章节

JS提取文本信息

好刚
 好刚
发布于 2015/01/01 15:05
字数 586
阅读 18
收藏 0

应该使用JavaScript

  • searchbot不支持JavaScritp
  • 对javascript缺乏支持的访问者

渐进增强

从最核心的内容开始,使用标记实现良好的结构;在逐步加强这些内容(CSS,JS)

平稳退化:在渐进增强的原则下,可以保证内容可以访问。

取得属性信息

  • 得到掩藏在属性里的信息

      var abbrArr = document.getElementsByTagName('abbr');
      var defs = new Array();
      for (var i = 0; i < abbrArr.length; i++) {
        var value = abbrArr[i].getAttribute('title');
        var key = abbrArr[i].lastChild.nodeValue;     //文本节点属于元素节点的下级子节点,需要使用childNodes数组或lastChild来定位
        defs[key] = value;
      }
    
  • 创建标记封装这些信息

  • 标记插入文档

显示属性信息

浏览器对元素信息的显示是默认的显示方式,即可以通过CSS,JS指定来更改默认的表现、行为

getAttribute兼容性检查问题

setAttribute亦然

if (!document.createTextNode) 
    alert(typeof document.createTextNode)
return false;
输出Function
if (!document.setAttribute) 
      alert(typeof document.setAttribute);
return false;
输出undefined

当对undefined数据进行 !运算时,会转变为Boolean型;!undefined 对应的布尔值为 TRUE。因此对getAttribute是不能进行兼容性检查的。

setAttribute属于元素节点方法,以上结论是谬误

alert(typeof abbrArr[i].getAttribute);
输出为Function

for (var i = 0 ; i< arrB.length; i++){
    var arrA[i] = arrB[i]    //语法错误,arrA数组需要先定义。
}

兼容性检查

  if (!document.getElementsByTagName) return false;
  if (!document.createElement) return false;
  if (!document.createTextNode) return false;

对于DOM方法,需要确认浏览器支持,才能往下继续执行

浏览器战争的延续

IE6不支持 abbr标签,使用平稳退化来解决:检查到不支持abbr属性时退出

if (abbrArr[i].childNodes.length<1) continue;

IE不支持abbr标签时,在统计abbr元素子节点时会返回错误值0。

对兼容性的检查尽量不要使用浏览器嗅探:难以做到面面俱到。

最后一个元素节点

浏览器可能将换行符作为节点,所以lastChild可能不是一个元素节点

var elementArr = parentElement[i].getElementsByTagName('*');    //使用通配符找到所有元素节点
if (elementArr.length < 1) continue;  //判断是否存在节点
var elem = elementArr[elementArr.length - 1]; //取得最后一个节点

思路

  • 创建特定元素构成的节点集合
  • 遍历节点,并取得信息,创建节点
  • 将新建节点插入结构数

© 著作权归作者所有

好刚
粉丝 5
博文 27
码字总数 30189
作品 0
武汉
程序员
私信 提问
模拟浏览器的神器 - HtmlUnit

随着Web的发展,RIA越来越多,JavaScript和Complex AJAX Libraries给网络爬虫带来了极大的挑战,解析页面的时候需要模拟浏览器执行JavaScript才能获得需要的文本内容。 好在有一个Java开源项...

杨尚川
2014/04/04
0
6
《编写可维护的JavaScript》笔记

书中说: 注释是和元素及文本一样的DOM节点,因此可以通过javascript将其提取出来。 比如: js的提取: templateText = mylist.firstChild.nodeValue; firstChild.nodeValue获取到的值为null,...

饮料
2014/04/27
0
0
爬虫获取 js 动态数据 (1)

爬虫遇到 js 动态数据时,主要解决方法有两种: 使用一些库,例如 Selenium,来模拟浏览器环境抓取数据。但这样做对内存和 CPU 的消耗都比较大,爬虫效率低,应尽量避免。 手动分析 js 请求,...

anye137
2018/06/05
0
0
如果你正在对Python爬虫蠢蠢欲动? 那么我现在带你彻底了解它!

1. 爬虫概述 简单来说,爬虫就是获取网页并提取和保存信息的自动化程序,下面概要介绍一下。 (1) 获取网页 (2) 提取信息 获取网页源代码后,接下来就是分析网页源代码,从中提取我们想要的数...

Python新世界
2018/08/07
0
0
如何获取html中的文本

将####1、2、3、4...这些位置的文本单独提取出来,javascript可以么,或者有什么其他语言解析库支持

jokco
2014/09/03
2.8K
12

没有更多内容

加载失败,请刷新页面

加载更多

kubernetes API 访问控制在阿里云容器服务(ACK)上的实践

提起K8s API的访问控制,很多同学应该都会想到RBAC,这是K8s用来做权限控制的方法,但是K8s对API的访问控制却不止于此,今天我们就来简单介绍下K8s的访问控制以及ACK如何利用这套方法提供便捷...

zhaowei121
12分钟前
0
0
从HelloWorld看Knative Serving代码实现

概念先知 官方给出的这几个资源的关系图还是比较清晰的: 1.Service: 自动管理工作负载整个生命周期。负责创建route,configuration以及每个service更新的revision。通过Service可以指定路由流...

迷你芊宝宝
12分钟前
0
0
如何防止http请求数据被篡改

故事的开始,面试官问了我一个问题: 如何防止http请求中数据被篡改? 回答: 1.设置客户端IP黑/白名单 1.1.客户端所有请求,请求到代理服务器(nginx),代理服务器维护黑/白名单的ip,决定是...

太猪-YJ
16分钟前
0
0
好程序员大数据笔记之:Hadoop集群搭建

在学习大数据的过程中,我们接触了很多关于Hadoop的理论和操作性的知识点,尤其在近期学习的Hadoop集群的搭建问题上,小细节,小难点拼频频出现,所以,今天集中总结以下笔记,希望对各位同学...

好程序员IT
23分钟前
0
0
MySql用navcat连接时报错 2509

在8版本以后的MySql默认的加密方式都改为了caching_sha2_password 因此进入mysql的命令行更改加密方式即可 ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER......

lanyu96
25分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部