曼城足球论坛技术论坛

找回密码
免费注册

QQ登录

只需一步,快速开始

EH搜刮
EH技术汇-专业的职场妙技充电站 妙哉!函数段子手趣味讲函数 足球任事器-会足球,做管理编制 足球 Home精品图文教程库
足球不给力? 何不试试FoxTable! 足球 2016函数公式研习大典 Office常识技巧免费学 制造焦点竞争力的职场宝典
Tableau-数据可视化工具 曼城足球论坛出品 - VBA代码宝免费下载
你的足球 2010实战技巧研习锦囊 不能自休, 过目难忘的 Office 新界面 足球 VBA经典代码实践指南
巡视: 55002 | 回复: 183
打印 上一主题 下一主题

[原创] 网页数据采集---网页文档解析篇(json/html/xml)

[复制链接]

TA的精华主题

TA的得分主题

跳转到指定楼层
1
楬橥于 2016-9-27 08:54 | 只看该作者 | 只看大图 回帖赞美 | 倒序浏览 | 阅读模式
本帖已被收录到常识树中,索引项: 网页交互
本帖末了由 liu-aguang 于 2016-10-18 21:27 编辑

Json/HTML/XML 是目前罕见的几种数据网页形式 , 解析它们 ( 即分辩出文档中必要的文本内容 ) 有很多形式 . 本文主要介绍浏览器自身的解析方式 ----JavaScript Dom jQuery. 不要被这些新名词吓倒 , 套用一本书名的说法 : 其实很简略 !

目录
一. 紧张的基础常识及技巧
1. 执行JavaScript语句的环境营建
2. execScript形式和eval函数
3. 执行JavaScript的全局函数
4. 执行自定义函数
5. JavaScript的数组和对象
6. 将网页文本写入剪贴板—clipboardData对象,足球社区互动。

二. Json与Json内容解析
1. 什么是Json?
2. 遍历对象或数组的形式
3. Jsonp解析形式
4. 数组和对象自身嵌套或互相嵌套的Json/Jsonp实例

三. 基于HTML DOM解析HTML文档
1.了解HTML基础概念
2.了解文档对象模型(HTML DOM)
3 .HTML文档解析
<1>应用Document对象的形式与属性解析
<2>应用节点对象的形式与属性解析.
<3>应用Table对象解析表数据

四. 基于jQuery对象解析HTML文档
1. 什么是jQuery?
2. 基础语法---如何获取元素内容
3. 选取器---如何选取元素
<1>元素选取器
<2>属性选取器
<3>选取器组合
<4>选取器内包括过滤
<5>内容选取器
<6>type选取器
4.基础的过滤器---如何聚焦指定元素
一个应用实例
5. 遍历---更多选取(过滤)HTML元素形式
<1>jQuery把HTML结构视为家族树
<2>遍历先人
<3>遍历后代
<4>遍历同胞
<5>把而今元素包括在选取鸠集中
<6>前往距而今元素最近的先人元素
<7>将匹配元素鸠集扩充为指定范畴的子集
<8>对 jQuery 对象进行迭代。

五. XML文档解析
1. XML文档结构
2. XML文档的加载
<1>议决微软的 XML 解析器加载 XML
<2>议决Microsoft.XMLHTTP,足球社区互动。 MSXML2.XMLHTTP等组件加载
3. 利用XML DOM的属性和形式探望打听元素的文本内容或属性,足球社区互动。
<1>利用XML DOM的形式选取XML元素
<2>利用XML DOM的属性探望打听元素的文本内容或属性
<3>探望打听元素文本内容和属性的两个实例
4. 定位XML DOM节点
5. 探望打听节点总结
6. 利用xPath查询XML元素

评分

参与人数 16 鲜花 +36 收起 理由
luxf1624 + 2 良好作品
daotongchen + 2 太强大了
猫哥abcd + 2 太强大了
想不到2015 + 2 良好作品
TB肥仔 + 2 良好作品

巡视全部评分

TA的精华主题

TA的得分主题

2
楼主 | 楬橥于 2016-9-27 09:04 | 只看该作者
本帖末了由 liu-aguang 于 2016-9-29 10:56 编辑

一. 紧张的基础常识及技巧

如今浏览器上看到的网页是如此地酷玄与生动 , 这都归功于浏览器中内置的 JavaScript. 所有静态网页恶果都是浏览器将网页文本转换为文档对象模型 (DOM) , 议决 JavaScript 编程完成的 . 选取 ( ) 网页的某内容仅是其中很小一局部功用 , 这也就是我们说到的 解析 ”. 换一种说法 ,VBA 中仅为提取网页的某些内容 , 并不是必定要编制去研习网页编程的一系列常识 . 我们只需掌管为数不多的若干句式与语法就可以做到为所欲为地完成解析事情 .

1. 执行 JavaScript 语句的环境营建
你如果要在 EXCEL VBA 中执行 Word VBA 语句 , 作法是在 EXCEL VBA 中执行类似语句 :
Set oWord=createobject(“Word.Application”),最火的足彩论坛。
然后就可以在 oWord(word 对象 ) 下执行 Word VBA 语句了 . 异样 , 我们要在 VBA 中执行 JavaScript 语句或函数可以创作发觉浏览器中的 Window( 窗口 ) 对象 , 这个对象下可以执行 JavaScript 语句或函数 :
Set oDom=CreateObject(“HTMLFILE”) ‘,足球论坛哪个火。 首先创作发觉 HTML Dom(html 文档对象模型 )
Set oWindow=oDom.parentWindow ‘ 然后就可创作发觉 Window 对象
说明 : 这里创作发觉的 oDom IE7 内置的文档对象模型 ; oWindow 也是 IE7 的窗口对象 .
在没有加载网页文本之前 , 现在 oDom 是一个空文档 .

2. execScript 形式和 eval 函数
执行 JavaScript 语句 , 可以使用 Window (窗口)对象的 execScrip 形式或 JavaScript eval 全局函数 . 两者功用类似 , 后者还可以间接前往变量值或计算值 .

1: execScript 用法
Sub execScript()
Set oDom= CreateObject("HTMLFILE"),足球吧论坛。
Set oWindow = oDom.parentWindow
oWindow.execScript"var d=new Date();t=d.足球社区。getTime()" ' JavaScript 代码放入双引号内。
t =oWindow.t ' 请珍重这种用法 : 如何从 javaScript 执行语句中得到变量值
MsgBox" 1970/01/01 至今已往日 " & t & " 毫秒 "
End Sub
会商: execScript 可执行 JavaScript Vbscript 代码,默认执行 javaScript. javaScript 语句之间用分号分隔。
2a: eval 用法
Subevala()
Set oDom =CreateObject("HTMLFILE"),第一足球网论坛。
Set oWindow =oDom.parentWindow,足球网页数据采集。
oWindow.execScript"str='abcdef'"
strLength =oWindow.eval("str.网页文足球社区互动档解析篇(json/html/xml)。length")
MsgBox " 字符串 str 的长度为 : "& strLength
End Sub

评分

参与人数 5 鲜花 +10 收起 理由
ione_fox + 2 感动扶植
纳铭m + 2 良好作品
today0427 + 2 良好作品
天之雨露 + 2 良好作品
wormtwo + 2 良好作品

巡视全部评分

TA的精华主题

TA的得分主题

3
楼主 | 楬橥于 2016-9-27 09:06 | 只看该作者
本帖末了由 liu-aguang 于 2016-10-29 10:02 编辑

2b: eval 用法
Sub evalb()
Set oDom = CreateObject("HTMLFILE"),足球VBA序次开拓。
Set oWindow = oDom.parentWindow
oDom.write"",曼城足球论坛技术论坛。
strLength =oWindow.eval("str='abcdef';str.足球网。length")
MsgBox " 字符串 str 的长度为 : "& strLength
End Sub
说明 : 在使用 Eval 函数前 , 必需先执行一次 execScirpt 恐怕在文档对象中写入至多一个 "
strLength = oWindow.l
MsgBox "字符串str的长度为: " & strLength
End Sub
说明: 在HTML文档中, " ',社区。
如果文档中仍然含 Scirpt 标签 , 就不用写入这句 .
stext = " 中国 "
MsgBox oWindow.encodeURIComponent(stext)
End Sub
3.2
Sub GFunb()
Set oDom =CreateObject("HTMLFILE"),互动。
Set oWindow = oDom.parentWindow
oDom.write "" ',解析。 如果文档中仍然含 Scirpt 标签 , 就不用写入这句 .
stext = " 中国 "
MsgBox oWindow.eval("encodeURIComponent('" & stext & "')"),json。
End Sub

4. 执行自定义函数

J avaScript 函数与 VBA 函数意义相近,不过 JavaScript 无“进程”概念,不前往值,假使只完成一些举动。 VBA 中称之为进程,而在 javaScript 中也叫函数。如:
不带参数的:
function a(){var s=5+6;return s},html。
功用:计算 5+6 的值赋给对象 s ,然后用关键词 return 前往 s 到调用途 ( 即函数 a 前往值为 s).
带参数的 :
functiona(x,y){s=x+y;return s}
说明:上面给出 javaScript 函数的大凡形式,要点:
(1) 关键字 function 大写;
(2) 参数个数任意;在某些情况下可以没有函数名。
(3) 执行的代码用花括号笼罩;
(4) 如果必要函数前往运算值,用关键字 return.

评分

参与人数 1 鲜花 +2 收起 理由
zpy2 + 2 良好作品

巡视全部评分

TA的精华主题

TA的得分主题

4
楼主 | 楬橥于 2016-9-27 09:07 | 只看该作者
本帖末了由 liu-aguang 于 2016-10-29 09:04 编辑

4.1
Sub a()
Set oDom =CreateObject("htmlfile"),xml。
Set oWindow =oDom.parentWindow,足球。
oWindow.execScript "function a(){var s=5+6;return s}",vba。
MsgBox oWindow.eval("a()")
End Sub

4.2
Sub a1()
Set oDom =CreateObject("htmlfile")
Set oWindow = oDom.parentWindow,序次。
oDom.write "",开拓。
MsgBox oWindow.eval("a()")
End Sub

4.3
Sub a3()
b1 = 5
b2 = 6
Set oDom =CreateObject("htmlfile"),足球。
Set oWindow = oDom.parentWindow
oWindow.execScript "function a(x,论坛。y){s=x+y;return s}"
MsgBox oWindow.eval("a(" & b1& ",技术论坛。" & b2 & ")") ‘ 就是执行函数 a(b1,b2)
End Sub

5. JavaScript 的数组和对象

(悠久记住 ----JavaScript , 变量名 / 函数名 / 关键字是大大写敏感的 !!!!
在网页解析中 , 经常用到的基础上就是数组和对象这两个概念 .

A. 数组 :
定义数组 a:
var a=[‘a’,’b’,’c’,1,2,3]
定义空数组 a:
var a=[]
说明 : (1) 方括号 ; (2) 元素间逗号分隔 ; (3) 字符串用单 ( 或双 ) 引号 ;(4)var 是变量类型 , 可省略的 .
读取数组 :
(1) 索引法 : 如读第一个元素 a[0]; 索引号从 0 开始 .
(2) 遍历法 : for(k in a){….}
(3) 数组长度 : a.length

5.1 索引法
Sub jArr1()
Set oDom =CreateObject("HTMLFILE"),足球网页数据采集。
Set oWindow = oDom.parentWindow
oWindow.execScript"a=['a','b',网页文足球社区互动档解析篇(json/html/xml)。'c',1,2,3];"
MsgBox oWindow.eval("a[0]")
MsgBox oWindow.eval("a.足球VBA序次开拓。length")
End Sub

5.2 遍历法
Sub jArr2()
Set oDom =CreateObject("HTMLFILE"),曼城足球论坛技术论坛。
Set oWindow = oDom.parentWindow
oWindow.execScript"a=['a','b',足球。'c',1,2,3];"
MsgBox oWindow.eval("s='';for(k in a){s=s+' ' +a[k];};s"),社区。
End Sub
说明 :
(1) JavaScript 定义字符时 , 要用单(或双)引号围起来 . s=’ 中国 ’;s=’’ ( 定义空字符 )
(2) 遍历数组 a ,k 值是索引号 , 所以真正的值是 a[k];
(3) “+” 号对数字来说是算术加 ; 对字符来说是连接符 ;
(4) 语句间要用分号隔开 ;
(5) 当有多个变量时 Eval 悠久前往的是末了语句的值 .
(6) 请留意 for 的句式。

评分

参与人数 1 鲜花 +2 收起 理由
samsinn + 2 良好作品

巡视全部评分

TA的精华主题

TA的得分主题

5
楼主 | 楬橥于 2016-9-27 09:08 | 只看该作者
本帖末了由 liu-aguang 于 2016-10-29 08:59 编辑

B. 对象
定义对象 o: var o={name: ’ 张三 ’,sex: ’ ’, age: 20}
说明: (1) 花括号 ; (2) 键(名)和值之间冒号分隔 ;(3) 健值对之间逗号分隔
值读取 :
(1) 点号法 : 如读取性别 o.sex
(2) 遍历法 : for(k in o){s=s+’ ‘ +o[k]}

5.3 点号法
Sub jObjA()
Set oDom =CreateObject("HTMLFILE"),互动。
Set oWindow = oDom.parentWindow
oWindow.execScript "o={'name': ' 张三 ','xb': ' ', 'age':20}"
MsgBox oWindow.o.xb ' 或下句形式
MsgBox oWindow.eval("o.name")
End Sub
说明 : 由于 JavaScript 对大小敏感 , VBA 中会将一些关键字的首字母主动转换为大写 , 所以大凡使用第二句方式读取值 .
读者可以测试语句 msgboxoWindow.o.Name 将会出错 . 此处 name 会主动转换为 Name

5.4 遍历法
Sub jObjB()
Set oDom =CreateObject("HTMLFILE")
Set oWindow = oDom.parentWindow
oWindow.execScript "o={name: ' 张三 ',xb: ' ', age:20}"
MsgBox oWindow.eval("s=''; for(k in o){s=s+' '+o[k]};s") ' 遍历值
MsgBox oWindow.eval("s='';for(k in o){s=s+' '+k};s") ' 遍历键
End Sub

6. 将网页文本写入剪贴板 —clipboardData 对象

大凡情况我们可议决 msgbox debug.print 来巡视和剖释网页 . 也可以用 Fiddler 来记实和巡视剖释网页 . 在这里我们介绍一种把网页内容写入剪贴板 , 然后粘贴到记事本中巡视的形式 .

:
Sub JsonArr()
Set oHTML =CreateObject("htmlfile")
Set oWindow = oHTML.parentWindow
Set http =CreateObject("Msxml2.XMLHTTP")
http.Open "GET","#otherUrl;, False
http.send
strHtml = http.responseText
oWindow.clipboardData.SetData"text", strHtml ‘ 这句代码是把文本 strHtml 写入剪贴板
End Sub
说明: clipboardData IE 中一个对象,有设置,读取或清除形式:
clipboardData.getData(“text”)
clipboardData.clearData “text”
更多相关常识可百度。

评分

参与人数 1 鲜花 +2 收起 理由
ione_fox + 2 感动扶植

巡视全部评分

TA的精华主题

TA的得分主题

6
楼主 | 楬橥于 2016-9-27 12:07 | 只看该作者
本帖末了由 liu-aguang 于 2016-9-27 17:40 编辑

同志们要耐心等哈,每窜改一次都要审核半天)半天往日了。

TA的精华主题

TA的得分主题

7
楬橥于 2016-9-27 13:05 | 只看该作者
liu-aguang 楬橥于 2016-9-27 12:07
半天往日了,内容都不能议决审核;都没有表情写了。

张惶就先发到附件里吧

TA的精华主题

TA的得分主题

8
楼主 | 楬橥于 2016-9-27 13:18 | 只看该作者
liucqa 楬橥于 2016-9-27 13:05
张惶就先发到附件里吧

只写了一局部,本想一边写一边窜改。

TA的精华主题

TA的得分主题

9
楬橥于 2016-9-27 13:19 | 只看该作者
顶+支持,楼主一直,强势插队围观

TA的精华主题

TA的得分主题

10
楬橥于 2016-9-27 13:23 | 只看该作者
liu-aguang 楬橥于 2016-9-27 13:18
只写了一局部,本想一边写一边窜改。

现在不能边写边改了,由于审核率貌似接近100%。
您必要登录后才可以回帖 登录 | 免费注册

本版积分规则

关心官方微信,高效办公专列,每天发车

手机版|关于我们|联系我们|曼城足球论坛

GMT+8, 2020-9-13 22:42, Processed in 0.0 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

? 1999-2021 Wooffice Inc.

沪公网安备号 沪ICP备号

本论坛谈吐纯属楬橥者私人看法,任何违抗国度相关法律的谈吐。

快速回复 前往顶部 前往列表