ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: Kaohsing

[讨论] 解析网页源码,获得所需数据。

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2017-11-3 20:23 | 显示全部楼层
Kaohsing 发表于 2017-11-3 16:17
最后说说CreateObject("htmlfile")解析数据   引用w3school的语录:HTML DOM 定义了多种查找元素的方法,除 ...

大哥,同样地方的网页,我看你怎么取,这种套了又套。。。我看不懂了。。网址如下:http://www.yuncaijing.com/news/id_9946674.html

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-11-3 23:03 | 显示全部楼层
本帖最后由 Kaohsing 于 2017-11-4 07:50 编辑

使用table标签解析数据
       在HTML中table标签是有开始和结束,是个闭合的标签。一般的形式<table 修饰部分列宽了,颜色啦,位置了等>.......</table>,只要找出包含两个标签之间的字符串,就可在Excel可以粘贴获得数据。下面演示一下

s1.png

     要是网页中只有一个表格,那就比较简单,下面演示获取所需的表格.

s2.png

     虽然数据是返回来了,但是格式没有返回来了,<table 后面只有个class,说明是用css 控制格式的,试着加入格式.
s3.png



评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2017-11-3 23:16 | 显示全部楼层
Kaohsing 发表于 2017-11-3 23:03
使用table标签解析数据
在HTML中table标签是又开始和结束,一般的形式.......,只要找出包含两个标签之 ...

我一般不喜欢用粘贴法,不稳定这玩意

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-11-4 08:03 | 显示全部楼层
kings12333 发表于 2017-11-3 23:16
我一般不喜欢用粘贴法,不稳定这玩意

   不知廿七楼的文字,你读了?粘贴法确实不好,超链接都过来,里面有时有控件的,可以用replace或正则替换一下。

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-11-4 09:24 | 显示全部楼层
使用正则解析数据
  关于正则理论基础知识请看大神们的神贴,需要用到的基本句式如下:
      Set regx =CreateObject("vbscript.regexp")  '引用正则
       regx.Pattern =" "                         ‘定义如何取出所需数据
       regx.Global = True                     '全局范围
       Set mh = regx.Execute(tt)  ’返回的数据

        不能再拿人个的网页测试啦,把人家网站搞坏了,人家升级了,以后拿数据就比较麻烦,
还是那自己编的静态网页试试吧是个div布局的,css控制格式,如下:
      s1.png


  部分网页:
    <table id="ghb">
   <caption >价格汇总</caption>
        <thead>  
             <tr> <th>日期</th><th>品名</th><th>规格</th><th>材质</th><th>产地</th>
                     <th>价格</th><th>比昨日</th><th>备注</th>
               </tr>   
         </thead>                       
            <tr class="kao">
             <td>2017/10/9</td><td>三级螺纹钢</td><td>Φ12mm</td><td>HRB400</td>
             <td>莱钢</td><td>4220</td><td>↑40</td><td>检尺</td>
           </tr>
数据很明显,在标签td中,
s2.png                   
数据不少,九千多条,这是个多年的汇总,当然不少
s3.png





TA的精华主题

TA的得分主题

发表于 2017-11-4 09:58 | 显示全部楼层
Kaohsing 发表于 2017-11-4 08:03
不知廿七楼的文字,你读了?粘贴法确实不好,超链接都过来,里面有时有控件的,可以用replace或正则替 ...

提取数据.rar (51.27 KB, 下载次数: 63)



大哥,看看这两个压缩包里的 html 文件有什么不同,里面的代码却只能对文件:原01.html有效,如果换成文件:现.html就读不到数据了。。由于代码用的是SCrip语句我根本看不懂

TA的精华主题

TA的得分主题

发表于 2017-11-4 12:51 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
kings12333 发表于 2017-11-4 09:58
大哥,看看这两个压缩包里的 html 文件有什么不同,里面的代码却只能对文件:原01.html有效,如 ...

肯定读不到数据了,一段代码并不是对所有网页都适用,你得重新分析,重新写代码

TA的精华主题

TA的得分主题

发表于 2017-11-4 13:29 | 显示全部楼层
屌爆了z 发表于 2017-11-4 12:51
肯定读不到数据了,一段代码并不是对所有网页都适用,你得重新分析,重新写代码

不是那个意思,这个网页内容是一个网站的,数据完全一样,帮处理下

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-11-4 15:05 | 显示全部楼层

  jquey 解析数据 (一)

用 CreateObject("htmlfile").parentWindow 亦可以解析数据,必须懂点HTML,这样可以知道标签或元素之间的上下,同级之间的关系,弄清他们之间的隶属关系,方可弄懂代码。下面来段源码。


<ul id="newslist">
     <liclass="list">
          <iclass="widget share-btn iconYCJ icon-sharing-ycjopacity-seven"></i>
          <sectionclass="nc-arc-wrap ">
               <time>今天09:43</time>
               <span>
                      <divclass="nc-con">
                             <h4>  <a 属性省略">     </a>    </h4>
                截至到2017年三季度,货币基金规模达到6.5万亿,相比二季度增长了1.25万亿,增  </div>
                        <ulclass="share-wrap">
                                   <liclass="share-weibo" >     <iclass="icon icon-sina"></i>微博   </li>
                                        <liclass="share-wechat pr" > <iclass="icon icon-wechat-dark">          </i>微信
                                       <divclass="share-wechat-wrap">   <div class="qrcode"></div>  </div>
                                   </li>
                          </ul>
                    </span>
                 </section>

         </li>
                  省略
         <li class="list">    省略    </li>  
         <li class="list">    省略    </li>
</ul>
这是个无序列表,我们所要所有信息都在class=list的li 标签下,下面实验一下,。
j1.png

挨在一块的数据,不是很理想,那就遍历一下。
j4.png

虽然还算可以,还需修改一下。
s5.png
数据 okl! 源码如下:
Sub kaohisng()

    Dim oHml As Object, oXml As Object
    Dim i%

    Set oHml = CreateObject("htmlfile")
    Set W = oHml.parentWindow
    oHml.write "<script src='http://ajax.microsoft.com/ajax/jquery/jquery-1.4.min.js'></script><body></body>"

    Set oXml = CreateObject("msxml2.xmlhttp")
    oXml.Open "GET", "file:///" & ThisWorkbook.Path & "\现在.html", False
    oXml.send
    oHml.body.innerHtml = oXml.responseText
    'Debug.Print W.eval("$('li.list').text()")
   Stop
    Set Z = W.eval("$('li.list')")
    Stop
    For i = 0 To W.eval("$('li.list').length") - 1
   ' Debug.Print "第" & i + 1 & "条数据...." & W.eval("$('li.list').eq(" & i & ").text()")
    Next
    Stop
    For i = 0 To W.eval("$('li.list').length") - 1
         Debug.Print "第" & i + 1 & "条数据时间。。。。." & Split(W.eval("$('li.list').eq(" & i & ").text()"), "【")(0)
         Debug.Print "第" & i + 1 & "条数据标题。。。。" & Split(W.eval("$('li.list').eq(" & i & ").text()"), " ")(2)
         Debug.Print "第" & i + 1 & "条数据内容。。。。" & Split(W.eval("$('li.list').eq(" & i & ").text()"), "】 ")(1)
    Next
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-11-4 15:09 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 Kaohsing 于 2017-11-5 18:48 编辑

jquey 解析数据 (二)   还是用36楼的例子,分析元素之间关系,运用迭代函数返回js的数组,(其实就是个自执行的遍历函数),然后遍历js数组取回数据。其实每条数据在 <li class="list">  和  </li>之间,也就是innertext ,在jQuery中是text(),遍历每一条,就能得到数据。
s1.png s2.png




您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-26 19:56 , Processed in 0.038710 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表