ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求助:如何抓取东方财富财经日历数据

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-10-5 18:15 | 显示全部楼层
Sub 財富財經日曆財經會議數據()
     Dim JsStr As String
     Dim Js As String
     Dim tmpStr As String
     Dim i As Integer
     Dim nPage As Byte
     Dim nRow As Integer

     ThisWorkbook.ActiveSheet.Cells.Clear   
     JsStr = "http://data.eastmoney.com/DataCenter_V3/cjrl/getData.ashx?&pagesize=50&page=1&js=var o&sortRule=1&sortType=ConferenceDate&startDateTime=2017-10-02&endDateTime=2017-10-31&Type=cjhy&rt=50239938"
     With CreateObject("WinHttp.WinHttpRequest.5.1")
         .Open "GET", JsStr, False
         .setrequestheader "Referer", "http://data.eastmoney.com/cjrl/default.html"
         .send
         JsStr = .responsetext
     End With
     tmpStr = JsStr & ";"
      With CreateObject("MSScriptControl.ScriptControl")
         .Language = "JScript"
         .addcode tmpStr
         nPage = .Eval("o.pages")
     End With
     nRow = 0
     For i = 1 To nPage
         JsStr = "http://data.eastmoney.com/DataCenter_V3/cjrl/getData.ashx?&pagesize=50&page=" & i & "&js=var o&sortRule=1&sortType=ConferenceDate&startDateTime=2017-10-02&endDateTime=2017-10-31&Type=cjhy&rt=50239938"
         With CreateObject("WinHttp.WinHttpRequest.5.1")
             .Open "GET", JsStr, False
             .setrequestheader "Referer", "http://data.eastmoney.com/cjrl/default.html"
             .send
             JsStr = .responsetext
         End With
         Js = "var r,k,row=c=1,d={};for(r in j){row++;for(k in j[r]){if(!d[k]){d[k]=c++;rng(1,d[k])=k;}rng(row,d[k])= j[r][k];}}"
         Js = "j=" & Split(Split(JsStr, "data"":")(1), "]")(0) & "]" & ";" & Js
         With CreateObject("MSScriptControl.ScriptControl")
             .Language = "JScript"
             .AddObject "rng", ThisWorkbook.ActiveSheet.Range("A" & nRow + 1)
             .Eval (Js)
         End With
         If i <> 1 Then
             With ThisWorkbook.ActiveSheet
                 .Rows(nRow + 1).Delete
                 nRow = .Range("A65536").End(xlUp).Row
             End With
         Else
             nRow = ThisWorkbook.ActiveSheet.Range("A65536").End(xlUp).Row
         End If
     Next i
     ThisWorkbook.ActiveSheet.Columns("A:R").AutoFit
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-10-5 22:33 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
phsu 发表于 2017-10-5 18:15
Sub 財富財經日曆財經會議數據()
     Dim JsStr As String
     Dim Js As String

谢谢phsu老师,财经会议数据能抓去了,我运行下来,不知道为啥9月不能运行抓取?我对照了查不出原因,请老师能看一下吗?运行到这句 .Eval (Js) '此处卡住
Sub 东财日历phsu财经修改版9()
     Dim JsStr As String
     Dim Js As String
     Dim tmpStr As String
     Dim i As Integer
     Dim nPage As Byte
     Dim nRow As Integer

     ThisWorkbook.ActiveSheet.Cells.Clear
     JsStr = "http://data.eastmoney.com/DataCenter_V3/cjrl/getData.ashx?&pagesize=50&page=1&js=var o&sortRule=1&sortType=ConferenceDate&startDateTime=2017-09-01&endDateTime=2017-09-30&Type=cjhy&rt=50239938"
     With CreateObject("WinHttp.WinHttpRequest.5.1")
         .Open "GET", JsStr, False
         .setrequestheader "Referer", "http://data.eastmoney.com/cjrl/default.html"
         .send
         JsStr = .responsetext
     End With
     tmpStr = JsStr & ";"
      With CreateObject("MSScriptControl.ScriptControl")
         .Language = "JScript"
         .addcode tmpStr
         nPage = .Eval("o.pages")
     End With
     nRow = 0
     For i = 1 To nPage
         JsStr = "http://data.eastmoney.com/DataCenter_V3/cjrl/getData.ashx?&pagesize=50&page=" & i & "&js=var o&sortRule=1&sortType=ConferenceDate&startDateTime=2017-09-01&endDateTime=2017-09-30&Type=cjhy&rt=50239938"
         With CreateObject("WinHttp.WinHttpRequest.5.1")
             .Open "GET", JsStr, False
             .setrequestheader "Referer", "http://data.eastmoney.com/cjrl/default.html"
             .send
             JsStr = .responsetext
         End With
         Js = "var r,k,row=c=1,d={};for(r in j){row++;for(k in j[r]){if(!d[k]){d[k]=c++;rng(1,d[k])=k;}rng(row,d[k])= j[r][k];}}"
         Js = "j=" & Split(Split(JsStr, "data"":")(1), "]")(0) & "]" & ";" & Js
         With CreateObject("MSScriptControl.ScriptControl")
             .Language = "JScript"
             .AddObject "rng", ThisWorkbook.ActiveSheet.Range("A" & nRow + 1)
             .Eval (Js) '此处卡住
         End With
         If i <> 1 Then
             With ThisWorkbook.ActiveSheet
                 .Rows(nRow + 1).Delete
                 nRow = .Range("A65536").End(xlUp).Row
             End With
         Else
             nRow = ThisWorkbook.ActiveSheet.Range("A65536").End(xlUp).Row
         End If
     Next i
     ThisWorkbook.ActiveSheet.Columns("A:R").AutoFit
      'dfrl格式整理
End Sub



TA的精华主题

TA的得分主题

发表于 2017-10-6 09:07 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
五指山888 发表于 2017-10-5 22:33
谢谢phsu老师,财经会议数据能抓去了,我运行下来,不知道为啥9月不能运行抓取?我对照了查不出原因,请 ...

改下HTTP地址中的日期试试

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-10-6 10:44 | 显示全部楼层
请老师能看一下吗?为啥除了10月份,其他月份都会卡住

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-10-6 10:47 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-10-6 10:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
phsu 发表于 2017-10-5 18:15
Sub 財富財經日曆財經會議數據()
     Dim JsStr As String
     Dim Js As String

不明白这段是啥意思,前面已经Get一次数据,后面为何还要Get 一次。。
      JsStr = "http://data.eastmoney.com/DataCenter_V3/cjrl/getData.ashx?&pagesize=50&page=" & i & "&js=var o&sortRule=1&sortType=ConferenceDate&startDateTime=2017-10-02&endDateTime=2017-10-31&Type=cjhy&rt=50239938"
         With CreateObject("WinHttp.WinHttpRequest.5.1")
             .Open "GET", JsStr, False
             .setrequestheader "Referer", "http://data.eastmoney.com/cjrl/default.html"
             .send
             JsStr = .responsetext
         End With


TA的精华主题

TA的得分主题

发表于 2017-10-6 12:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
五指山888 发表于 2017-10-6 10:44
请老师能看一下吗?为啥除了10月份,其他月份都会卡住

Sub 財富財經日曆財經會議數據()
     Dim JsStr As String
     Dim Js As String
     Dim tmpStr As String
     Dim i As Integer
     Dim nPage As Byte
     Dim nRow As Integer

     ThisWorkbook.ActiveSheet.Cells.Clear
     JsStr = "http://data.eastmoney.com/DataCenter_V3/cjrl/getData.ashx?&pagesize=50&page=1&js=var o&sortRule=1&sortType=ConferenceDate&startDateTime=2017-09-01&endDateTime=2017-09-29&Type=cjhy&rt=50239938"
     With CreateObject("WinHttp.WinHttpRequest.5.1")
         .Open "GET", JsStr, False
         .setrequestheader "Referer", "http://data.eastmoney.com/cjrl/default.html"
         .send
         JsStr = .responsetext
     End With
     tmpStr = JsStr & ";"
      With CreateObject("MSScriptControl.ScriptControl")
         .Language = "JScript"
         .addcode tmpStr
         nPage = .Eval("o.pages")
     End With
     nRow = 0
     For i = 1 To nPage
         JsStr = "http://data.eastmoney.com/DataCenter_V3/cjrl/getData.ashx?&pagesize=50&page=" & i & "&js=var o&sortRule=1&sortType=ConferenceDate&startDateTime=2017-09-01&endDateTime=2017-09-29&Type=cjhy&rt=50239938"
         With CreateObject("WinHttp.WinHttpRequest.5.1")
             .Open "GET", JsStr, False
             .setrequestheader "Referer", "http://data.eastmoney.com/cjrl/default.html"
             .send
             JsStr = .responsetext
         End With
         Js = "var r,k,row=c=1,d={};for(r in j){row++;for(k in j[r]){if(!d[k]){d[k]=c++;rng(1,d[k])=k;}rng(row,d[k])= j[r][k];}}"
         Js = "j=" & Split(Split(JsStr, "data"":")(1), "}]")(0) & "}]" & ";" & Js
         With CreateObject("MSScriptControl.ScriptControl")
             .Language = "JScript"
             .AddObject "rng", ThisWorkbook.ActiveSheet.Range("A" & nRow + 1)
             .Eval (Js)
         End With
         If i <> 1 Then
             With ThisWorkbook.ActiveSheet
                 .Rows(nRow + 1).Delete
                 nRow = .Range("A65536").End(xlUp).Row
             End With
         Else
             nRow = ThisWorkbook.ActiveSheet.Range("A65536").End(xlUp).Row
         End If
     Next i
     ThisWorkbook.ActiveSheet.Columns("A:R").AutoFit
End Sub

TA的精华主题

TA的得分主题

发表于 2017-10-6 13:12 | 显示全部楼层
kings12333 发表于 2017-10-6 10:55
不明白这段是啥意思,前面已经Get一次数据,后面为何还要Get 一次。。

第一次GET用來擷取總頁數,以決定循環次數。後面用循環GET每頁的資料。

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-10-6 13:20 | 显示全部楼层
phsu 发表于 2017-10-6 13:12
第一次GET用來擷取總頁數,以決定循環次數。後面用循環GET每頁的資料。

谢谢老师,我试了8,9月份都可以了,您改在哪儿?我还没来得及看,先谢谢老师了

TA的精华主题

TA的得分主题

发表于 2017-10-6 14:14 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
phsu 发表于 2017-10-6 13:12
第一次GET用來擷取總頁數,以決定循環次數。後面用循環GET每頁的資料。

能否改成数据不用单元格显示,直接用LISTBOX或LISTVIEW控件来显示呢。。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-20 06:29 , Processed in 0.041295 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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