ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 上海金属期货价格-实时动态更新的网页如何获取表格数据

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-1-11 10:38 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
简单的网抓学了一点,这类却弄了一两天都搞不掂(抓包过程有数据,但取不出来)
网址为:http://www.shfe.com.cn/statements/dataview.html?paramid=delaymarket_all
1)不需登录,只是会实时更新,请问如何抓取表格的数据;
2)另外,能否实现每小时(如正点)运行一次获取最新数据?

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-1-11 12:10 | 显示全部楼层
本帖最后由 aman1516 于 2017-1-11 22:53 编辑

取数部分参照网上的一些例子写的代码,不知道问题出在哪里:
  1. <p>
  2. Sub shfe()
  3. Dim Htm0 As Object, XmlHttp As Object, url$, tb, m%, n%, COOKIE
  4. Set Htm0 = CreateObject("htmlfile")
  5. Set XmlHttp = CreateObject("MSXML2.XmlHttp")
  6. On Error Resume Next
  7. Application.ScreenUpdating = False
  8. Cells.ClearContents
  9. r = 1
  10. 'r = [a65536].End(xlUp).Row + 2

  11. url = "http://www.shfe.com.cn/statements/dataview.html?paramid=delaymarket_all"
  12. Dim Html As Object, oHttp As Object, list As Object
  13. Dim arr, i%, j%
  14. Set Html = CreateObject("htmlfile")
  15. Set oHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
  16. oHttp.Option(0) = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586"
  17. With oHttp
  18.      .Option(6) = 0
  19.      .Open "GET", "http://www.shfe.com.cn/statements/delaymarket_all.html", False
  20.      .setRequestHeader "Content-Type", "application/xhtml+xml"
  21.      .SEND
  22.      'COOKIE = Split(.getResponseHeader("Set-Cookie"), ";")(0)                  '第一次调用获取Cookie
  23.      strText1 = .responsetext
  24.       
  25.      .Open "POST", "http://www.shfe.com.cn/statements/delaymarket_all.html", False
  26.      .Option(6) = 1
  27.      .setRequestHeader "Referer", "http://www.shfe.com.cn/statements/dataview.html?paramid=delaymarket_all"          '设置正确的Referer
  28.      '.setRequestHeader "Cookie", COOKIE                                                                             '设置有效Cookie
  29.      .setRequestHeader "Content-Type", "application/xhtml+xml"
  30.      .setRequestHeader "Connection", "keep-alive"
  31.      .SEND
  32.      strText2 = .responsetext
  33. End With
  34.    
  35. Cells(r, 1) = Format(Date, "yyyy年m月d日") & "上海期货价格"</p><p>ReDim arr(1 To 200, 1 To 13)
  36. Html.body.innerHTML = strText2
  37. Set list = Html.getElementsByTagName("table")(0)
  38. For i = 0 To list.Rows.Length - 1
  39.     m = m + 1
  40.     For j = 0 To list.Rows(1).Cells.Length
  41.         arr(m, j + 1) = list.Rows(i).Cells(j).innerText
  42.     Next
  43. Next
  44. Range("A2").Resize(m, 13) = arr
  45. Erase arr
  46. Application.ScreenUpdating = True
  47. End Sub
  48. </p>
复制代码


请大家帮忙改下……(已修正,谢谢!)

TA的精华主题

TA的得分主题

发表于 2017-1-11 19:09 | 显示全部楼层
本帖最后由 Kaohsing 于 2017-1-11 19:10 编辑
aman1516 发表于 2017-1-11 12:10
取数部分参照网上的一些例子写的代码,不知道问题出在哪里:

只需定义一下arr的大小,Dim arr(1 To 200, 1 To 13)。
Range("A2").Resize(m, list.Rows.Length) = arr改为Range("A2").Resize(m, 13) = arr。
就可运行。     strText2 = .responsetext这句好像可有可无。

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-1-11 22:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 aman1516 于 2017-1-11 22:58 编辑
Kaohsing 发表于 2017-1-11 19:09
只需定义一下arr的大小,Dim arr(1 To 200, 1 To 13)。
Range("A2").Resize(m, list.Rows.Length) = arr ...

谢谢提醒,我说乍这么糊涂呢,连最基本的数组定义漏掉了……
因为后面是:
Html.body.innerHTML = strText2
Set list = Html.getElementsByTagName("table")(0)
所以 strText2 = .responsetext 还是要的,是 strText1 = .responsetext 这句可有可无
已测试OK,非常感谢!

TA的精华主题

TA的得分主题

发表于 2017-1-13 08:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
aman1516 发表于 2017-1-11 22:50
谢谢提醒,我说乍这么糊涂呢,连最基本的数组定义漏掉了……
因为后面是:
Html.body.innerHTML = strT ...

谢谢,非常对。

TA的精华主题

TA的得分主题

发表于 2017-1-13 09:09 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-7-24 16:44 | 显示全部楼层
aman1516 发表于 2017-1-11 12:10
取数部分参照网上的一些例子写的代码,不知道问题出在哪里:

你好,有个问题想请教一下。是否可以利用vba抓取上市公司财报?有没有这方面的经验?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-3-29 13:19 , Processed in 0.049806 second(s), 9 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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