ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] Excel vba获取html数据

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-5-14 10:44 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
大家好,我要获取一个网站的html数据,我用F12分析,不是json的数据,是html的数据,打开它的里面网址,却看不到数据,请问用VBA怎么实现下载html的数据?网站http://www.pinble.com/Lottery.htm  里面的开奖信息,全国开奖 排列三。
QQ截图20200514103848.jpg
QQ图片20200514104038.png
QQ截图20200514104145.jpg
我要把里面的开奖数字和期号时间读取到Excel中,用VBA的方式。请问大家,有什么办法吗?感谢。

TA的精华主题

TA的得分主题

发表于 2020-5-14 12:19 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
是html的数据,打开它的里面网址却看不到数据。

既然是html里的数据,怎么可能打开它的里面网址,却看不到数据。

所以,要么你的前半句错了,要么你的后半门口错了

TA的精华主题

TA的得分主题

发表于 2020-5-14 14:19 | 显示全部楼层
PQ参考解法
QQ截图20200514141928.png

开奖信息 - 拼搏在线彩票网.rar

14.35 KB, 下载次数: 72

TA的精华主题

TA的得分主题

发表于 2020-5-14 14:57 | 显示全部楼层
这是个嵌套网页,
要先打开 http://www.pinble.com/Lottery.htm
再从这个页面上跳到 排列三 开奖号页面上,
直接打开 排列三 开奖号页面是不行的。
在 .send前先要设置头部

        .setrequestheader "Host", "www.pinble.com"
        .setrequestheader "Referer", "http://www.pinble.com/Lottery.htm"
        .send

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-5-14 16:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
feeyii 发表于 2020-5-14 14:57
这是个嵌套网页,
要先打开 http://www.pinble.com/Lottery.htm
再从这个页面上跳到 排列三 开奖号页面上 ...

你好,那个排列三的网址确实是http://www.pinble.com/Lottery.htm,但是要点击里面的排列三,才有具体数据,我现在是要下载里面的具体数据,要怎么弄?能写几句看看吗?我只处理过json的数据,那个读取过来,直接就是一大串字符串,然后用split函数切割就行,这种网站的情况,我还没处理过,不会弄,请指教。万分感谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-5-14 16:12 | 显示全部楼层

你好,感谢你的热心回答,我不是要获取你显示的数据,你抓到的是首页的数据,我要抓里面具体的历史数据,就像我第一张图片里显示的一样,是里面的具体历史数据。

TA的精华主题

TA的得分主题

发表于 2020-5-14 21:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Sub PL3()
Dim objXML As Object
Set reg = CreateObject("VBScript.RegExp")

myStr = "http://www.pinble.com/LotteryOneList.aspx?type=3332858CC6D0DB930D85469DC90329E2&class=%E5%85%A8%E5%9B%BD%E4%BD%93%E5%BD%A9&lx=pls&name=%E6%8E%92%E5%88%97%E4%B8%89"

Set objXML = CreateObject("WinHttp.WinHttpRequest.5.1")
    With objXML
        .Open "POST", myStr, False
        
        .setrequestheader "Host", "www.pinble.com"
        .setrequestheader "Referer", "http://www.pinble.com/Lottery.htm"
        .send

        txtContent = .responseText

End With

With reg
        .Global = True
        .Pattern = " \d{4}-\d{2}-\d{2}"
        Set 日期 = .Execute(txtContent)
        .Pattern = " \d{7}"
        Set 期号 = .Execute(txtContent)
        .Pattern = "\d{3}</span>"
        Set 开奖号 = .Execute(txtContent)
        t = 日期.Count
End With

Cells(1, 1) = "日期"
Cells(1, 2) = "期号"
Cells(1, 3) = "开奖号"
For i = 0 To t - 1
Cells(i + 2, 1) = 日期(i)
Cells(i + 2, 2) = 期号(i)
Cells(i + 2, 3) = Replace(开奖号(i), "</span>", "")
Next i


Set objXML = Nothing
Set reg = Nothing

End Sub


用正则表达式

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-5-14 21:50 | 显示全部楼层
Sub test()
    Dim myStr As String
    Dim Tables
    Dim i As Integer
    Dim j As Integer
    Dim nRow As Integer
    Dim nCol As Byte
    Dim Arr()
    With CreateObject("winhttp.winhttprequest.5.1")
        .Open "GET", "http://www.pinble.com/LotteryOneList.aspx?type=3332858CC6D0DB930D85469DC90329E2&class=%E5%85%A8%E5%9B%BD%E4%BD%93%E5%BD%A9&lx=pls&name=%E6%8E%92%E5%88%97%E4%B8%89", False
        .setrequestheader "Referer", "http://www.pinble.com/Lottery.htm"
        .send
        myStr = .responsetext
    End With
    With CreateObject("htmlfile")
        .write myStr
        Set Tables = .all.tags("table")
        With Tables(2)
            nRow = .Rows.Length
            nCol = .Rows(1).Cells.Length
            ReDim Arr(0 To nRow - 1, 0 To nCol - 1)
            For i = 0 To nRow - 1
                nCol = Tables(2).Rows(i).Cells.Length
                For j = 0 To nCol - 1
                    Arr(i, j) = Tables(2).Rows(i).Cells(j).innertext
                Next j
            Next i
        End With
        With ActiveSheet
            .Cells.Clear
            .Range("A1").Resize(nRow, nCol) = Arr
        End With
    End With
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-5-14 21:51 | 显示全部楼层
請參閱附件。

test.zip

14.69 KB, 下载次数: 55

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-5-15 15:27 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
feeyii 发表于 2020-5-14 21:06
Sub PL3()
Dim objXML As Object
Set reg = CreateObject("VBScript.RegExp")

万分感谢,可以用哦。我要好好研究一下。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-24 12:00 , Processed in 0.047214 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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