ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 网爬程序纠错

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-6-14 16:59 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Sub cc()
    Dim arr(1 To 100000, 1 To 16)
    Cells.ClearContents
    Set oDoc = CreateObject("htmlfile")
    [a1:d1] = Array("序号", "股票代码", "股票简称", "销售毛利率" & Chr(10) & "%")
    With CreateObject("MSXML2.XMLHTTP")
        For p = 1 To 73
            .Open "GET", "http://data.eastmoney.com/bbsj/201803/yjbb.html", False
            .Send
            oDoc.body.innerHTML = StrConv(.responsebody, vbUnicode)
            Set r = oDoc.All.tags("table")(0).Rows
            For i = 0 To r.Length - 1
                k = k + 1
                For x = 1 To 16
                    arr(k, x) = r(i).Cells(x - 1).innerText
                Next
            Next
            Set r = Nothing
        Next
    End With
    Range("A2").Resize(k, 6) = arr
End Sub

哪位给看看上面程序有什么问题哦

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-19 18:15 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-6-20 09:34 | 显示全部楼层
P循環裡面沒看到P。等於跑了73圈相同的循環。

TA的精华主题

TA的得分主题

发表于 2018-6-20 10:05 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
东方财富网,以前抓过。
你抓的网页是个假的,只是一个展示窗体,永远显示第一页,真实是用下面的页面的数据不停的替换它的内容。你明显没有做抓包分析。
真实的数据是返回一个JSON
地址在:http://dcfm.eastmoney.com/em_mut ... ;js=var%20CMCIRQmO={pages:(tp),data:%20(x)}&filter=(securitytypecode%20in%20(%27058001001%27,%27058001002%27))(reportdate=^2018-03-31^)&rt=50981971
这是以第2页为例,而且这个url 是可以减短的,看到里面的参数了?p=2 把它进行1-73迭代就可以了。
返回的数据是个Json 的数组,想办法处理下面的js 就可以得到你要的数据了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-20 14:01 | 显示全部楼层
本帖最后由 sjvkik 于 2018-6-20 14:14 编辑

多谢,可还是看不懂啊
Sub cc()
    Dim arr(1 To 100000, 1 To 16)
    Cells.ClearContents
    Set oDoc = CreateObject("htmlfile")
    [a1:d1] = Array("序号", "股票代码", "股票简称", "销售毛利率" & Chr(10) & "%")
    With CreateObject("MSXML2.XMLHTTP")
        For j = 1 To 73
            .Open "GET", "http://dcfm.eastmoney.com/em_mutisvcexpandinterface/api/js/get?type=YJBB20_YJBB&token=70f12f2f4f091e459a279469fe49eca5&st=latestnoticedate&sr=-1&p=j&ps=50&js=var%20CMCIRQmO=", False
            .Send
            oDoc.body.innerHTML = StrConv(.responsebody, vbUnicode)
            Set r = oDoc.All.tags("table")(0).Rows
            For i = 0 To r.Length - 1
                k = k + 1
                For x = 1 To 16
                    arr(k, x) = r(i).Cells(x - 1).innerText
                Next
            Next
            Set r = Nothing
        Next
    End With
    Range("A2").Resize(k, 6) = arr
End Sub


TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-20 14:16 | 显示全部楼层
hehex 发表于 2018-6-20 10:05
东方财富网,以前抓过。
你抓的网页是个假的,只是一个展示窗体,永远显示第一页,真实是用下面的页面的数 ...

Sub cc()
    Dim arr(1 To 100000, 1 To 16)
    Cells.ClearContents
    Set oDoc = CreateObject("htmlfile")
    [a1:d1] = Array("序号", "股票代码", "股票简称", "销售毛利率" & Chr(10) & "%")
    With CreateObject("MSXML2.XMLHTTP")
        For j = 1 To 73
            .Open "GET", "http://dcfm.eastmoney.com/em_mutisvcexpandinterface/api/js/get?type=YJBB20_YJBB&token=70f12f2f4f091e459a279469fe49eca5&st=latestnoticedate&sr=-1&p=j&ps=50&js=var%20CMCIRQmO=", False
            .Send
            oDoc.body.innerHTML = StrConv(.responsebody, vbUnicode)
            Set r = oDoc.All.tags("table")(0).Rows
            For i = 0 To r.Length - 1
                k = k + 1
                For x = 1 To 16
                    arr(k, x) = r(i).Cells(x - 1).innerText
                Next
            Next
            Set r = Nothing
        Next
    End With
    Range("A2").Resize(k, 6) = arr
End Sub


是这样吗,可是这样还是跑不出来啊

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-20 14:39 | 显示全部楼层
hehex 发表于 2018-6-20 10:05
东方财富网,以前抓过。
你抓的网页是个假的,只是一个展示窗体,永远显示第一页,真实是用下面的页面的数 ...

Sub cc()
    Dim arr(1 To 100000, 1 To 16)
    Cells.ClearContents
    Set oDoc = CreateObject("htmlfile")
    [a1:d1] = Array("序号", "股票代码", "股票简称", "销售毛利率" & Chr(10) & "%")
    With CreateObject("MSXML2.XMLHTTP")
        For j = 1 To 73
            .Open "GET", "http://dcfm.eastmoney.com/em_mutisvcexpandinterface/api/js/get?type=YJBB20_YJBB&token=70f12f2f4f091e459a279469fe49eca5&st=latestnoticedate&sr=-1&p=j&ps=50&js=var%20CMCIRQmO=", False
            .Send
            oDoc.body.innerHTML = StrConv(.responsebody, vbUnicode)
            Set r = oDoc.All.tags("table")(0).Rows
            For i = 0 To r.Length - 1
                k = k + 1
                For x = 1 To 16
                    arr(k, x) = r(i).Cells(x - 1).innerText
                Next
            Next
            Set r = Nothing
        Next
    End With
    Range("A2").Resize(k, 6) = arr
End Sub



是这样/?还是过不去呢

TA的精华主题

TA的得分主题

发表于 2018-6-20 15:33 | 显示全部楼层
sjvkik 发表于 2018-6-20 14:39
Sub cc()
    Dim arr(1 To 100000, 1 To 16)
    Cells.ClearContents

你的是分析含有table标签的。而该网页是返回json格式数据,所以不能套用

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-20 17:21 | 显示全部楼层
Kaohsing 发表于 2018-6-20 15:33
你的是分析含有table标签的。而该网页是返回json格式数据,所以不能套用

那怎么弄啊

TA的精华主题

TA的得分主题

发表于 2018-6-20 17:23 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-28 02:16 , Processed in 0.038007 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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