ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1887|回复: 13

[已解决] 关于获取网页数据的问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-8-18 22:17 | 显示全部楼层 |阅读模式
本帖最后由 a20089668 于 2014-8-20 06:55 编辑

For Each td In IE.Document.getelementsbytagname("td")
i = i + 1
Cells(i, 1) = td.innerText
Next

上面的循环能把网页<td> </td>之间的内容全写在 第一列上。

但我想要的是,每16个<td> </td>之间的内容写在一行上,该怎么去改这段代码呢?
注:每16个为一行。

TA的精华主题

TA的得分主题

发表于 2014-8-18 22:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
                    Set oDoc = CreateObject("htmlfile")
                    oDoc.body.innerHTML = rawdata '网页源文件之文本内容
                    Set MYtable = oDoc.getElementById("ctl00_Content_GridView1") 'ctl00_Content_GridView1为TABLE的ID号
                    ‘If MYtable Is Nothing Then msgbox "TABLE is empty"
                    Set r = MYtable.Rows
                    For rc = 0 To r.Length - 1
                            For cc = 0 To r(rc).Cells.Length - 1
                                        Cells(rc+1, cc+1) = r(rc).Cells(cc).innerText
                            Next cc
                    Next rc                  
Set oDoc = Nothing

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-18 22:36 | 显示全部楼层
kangatang 发表于 2014-8-18 22:28
Set oDoc = CreateObject("htmlfile")
                    oDoc.body.innerHTML = r ...


您好,先感谢您的帮助!
您给的代码不是完整的代码吧?
打开网站的那句代码呢?
我用IE的方法来打开网页的,完整代码如下
Sub 获取网页数据()
Dim i%, j%
Set IE = CreateObject("internetexplorer.application")
IE.Navigate "http://www.okooo.com/zucai/shuju/zhishu/14109/"
IE.Visible = False
Do While IE.ReadyState <> 4
DoEvents
Loop
For Each td In IE.Document.getelementsbytagname("td")
i = i + 1
Cells(i, 1) = td.innerText

Next
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-19 08:19 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
追加一个问题:
<a href=""/soccer/match/705808/history/"" target=""_blank"" class=""ctrl_homename"">中国人民</a>
网页源内存在很多类似上面的代码,我想获取包含有“href=""/soccer/match” 这个字符串的整行内容,该用什么方法?
最后我想要的结果:
705808 中国人民

TA的精华主题

TA的得分主题

发表于 2014-8-19 08:27 | 显示全部楼层
  1. Sub wy()
  2. t = "<a href=""/soccer/match/705808/history/"" target=""_blank"" class=""ctrl_homename"">中国人民</a>"
  3. w = Split(t, "/")(3)

  4. End Sub
复制代码
类似像这样。。。网页分析的不懂。。

TA的精华主题

TA的得分主题

发表于 2014-8-19 08:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Sub 按钮1_Click()
  2.     Dim url, html
  3.     n = 2
  4.     url = "http://www.okooo.com/zucai/shuju/zhishu/14109/"
  5.     Set html = CreateObject("htmlfile")
  6.     With CreateObject("msxml2.xmlhttp")
  7.         .Open "get", url, False
  8.         .send
  9.         html.body.innerhtml = StrConv(.responsebody, vbUnicode)
  10.         Set tb = html.all.tags("table")(0).Rows
  11.         For i = 1 To tb.Length - 1
  12.             n = n + 1
  13.             For j = 0 To tb(i).Cells.Length - 1
  14.                 Cells(n, j + 1) = tb(i).Cells(j).innertext
  15.             Next
  16.         Next
  17.     End With

  18. End Sub
  19. Sub 按钮2_Click()
  20.     Range("a3:p65536").ClearContents
  21. End Sub
复制代码

okooo.rar

9.9 KB, 下载次数: 13

TA的精华主题

TA的得分主题

发表于 2014-8-19 09:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
..............................

导入数据.rar

11.89 KB, 下载次数: 11

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-19 09:25 | 显示全部楼层
suwenkai 发表于 2014-8-19 08:37

首先感谢您的帮助,这个代码正是我想需要的。
htmlfile 这种获取网页的方法我也查找过来测试,但就是捣鼓不起来。
后来用打开IE后获取数据,能成功,但得不到想要的格式,3点多爬起来再写段代码来重新整理得到 想要的格式。
两段代码远不如您写的准确、精简!
再次感谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-19 09:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 a20089668 于 2014-8-19 09:38 编辑
suwenkai 发表于 2014-8-19 08:37


出现一个问题,
对于历史期数,例如
http://www.okooo.com/zucai/shuju/zhishu/14105/
或者
http://www.okooo.com/zucai/shuju/zhishu/14106/
凡是比分为2-0的,写入Excel表都是显示2000-2-1,其他比分则能显示2014-x-x的格式,取后面3位则是正确的比分。是什么原因造成的呢?

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-19 09:47 | 显示全部楼层
wj2368 发表于 2014-8-19 09:16
..............................

谢谢帮助。
您这个是录制宏的吧,还行,能得到正确的结果,但就是速度挺慢的,应该能优化吧,等回来是再研究下。

有个问题挺奇怪的,发觉大家都还在用2003版本的office。
2013我都用了3年了。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-23 15:42 , Processed in 0.042767 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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