首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Excel VBA中使用WinHTTPRequest访问网站表格

在Excel VBA中使用WinHTTPRequest访问网站表格
EN

Stack Overflow用户
提问于 2018-06-09 18:23:25
回答 2查看 1.5K关注 0票数 0

我已经编写了代码,从网站上抓取一个表格,并从该表格中拉出每个单元格,然后将它们放入excel电子表格中。当网站正确加载时,代码可以完美地工作。

问题是网站不能很好地使用internet explorer,因此代码只有大约一半的时间可以成功执行。我可以写一个例程来检查网站是否加载成功,如果没有,就重复一次,但是我想看看是否可以让它与WinHTTPRequest一起工作。

下面几行是我如何使用基于internet explorer的webscraping访问表格,最后一行是我如何将表格加载到一个变量中。

代码语言:javascript
运行
AI代码解释
复制
Set IE = CreateObject("InternetExplorer.Application")
IE.navigate "https://weather.com/weather/tenday/l/12345:4:US"
IE.Visible = True

Application.Wait (Now() + TimeValue("00:02:00"))

Set doc = IE.document

Set WeatherTable = doc.getElementsByClassName("twc-table")(0)

我可以使用下面的代码通过WinHTTPRequest加载有问题的网站。

代码语言:javascript
运行
AI代码解释
复制
Set doc = New HTMLDocument

With CreateObject("WINHTTP.WinHTTPRequest.5.1")
    .Open "GET", "https://weather.com/weather/tenday/l/12345:4:US", False
    .send
    doc.body.innerHTML = .responseText
End With

但是,当我尝试使用下面这行代码抓取表时,我得到“运行时错误'438':Object不支持此属性或方法”。

代码语言:javascript
运行
AI代码解释
复制
Set WeatherTable = doc.getElementByclassname("twc-table")(0)

基本上,我需要WinHTTP网络抓取的等价物。

我已经研究了向下遍历html文档(doc.body.all.item(1)等),但在遇到错误之前并没有走多远。我也看过Selenium插件,但我不记得是否能够成功下载和安装它,我甚至不确定它是否仍然适用于当前版本的chrome / firefox。

这是完整的代码,允许我通过internet explorer webscraping获取表格,然后将其放到excel电子表格中。

任何帮助都是非常感谢的。

代码语言:javascript
运行
AI代码解释
复制
Sub GetTable2()

Dim IE As Object
Dim doc As HTMLDocument
Dim WeatherTable As HTMLTable
Dim WeatherTableRows As HTMLTableRow
Dim HTMLTableCell As HTMLTableCell
Dim HeaderRow As Boolean

Dim RowCount As Long
Dim ColumnCount As Long

Dim i As Long

RowCount = 1
ColumnCount = 1
HeaderRow = True

Set IE = CreateObject("InternetExplorer.Application")
IE.navigate "https://weather.com/weather/tenday/l/12345:4:US"
IE.Visible = True

'Application.Wait (Now() + TimeValue("00:02:00"))

Set doc = IE.document

Set WeatherTable = doc.getElementsByClassName("twc-table")(0)

    For Each WeatherTableRows In WeatherTable.Rows
        i = 1
        For Each HTMLTableCell In WeatherTableRows.Cells
            If HeaderRow = True Then
                ThisWorkbook.Sheets("Sheet5").Cells(RowCount, ColumnCount).Value = HTMLTableCell.innerText
                ColumnCount = ColumnCount + 1
            Else
                If i = 1 Then
                    i = i + 1
                Else
                    ThisWorkbook.Sheets("Sheet5").Cells(RowCount, ColumnCount).Value = HTMLTableCell.innerText
                    ColumnCount = ColumnCount + 1
                End If
            End If
        Next HTMLTableCell
        HeaderRow = False
    ColumnCount = 1
    RowCount = RowCount + 1
    Next WeatherTableRows

IE.Quit
Set IE = Nothing
Set doc = Nothing

End Sub
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-09 18:32:01

你错过了一个s。它是复数,因为您将通过className获得一个元素s的集合。

代码语言:javascript
运行
AI代码解释
复制
Set WeatherTable = doc.getElementsByClassName("twc-table")(0)
票数 1
EN

Stack Overflow用户

发布于 2018-06-09 19:51:42

为了使您的方法更简洁,您也可以尝试这种方式。

代码语言:javascript
运行
AI代码解释
复制
Sub FetchTabularData()
    Dim elem As Object, trow As Object, S$, R&, C&

    [B1:G1] = [{"Day","Description","High/Low","Precip","Wind","Humidity"}]

    With New WinHttp.WinHttpRequest
        .Open "GET", "https://weather.com/weather/tenday/l/12345:4:US", False
        .send
        S = .responseText
    End With

    With New HTMLDocument
        .body.innerHTML = S

        For Each elem In .querySelector(".twc-table").getElementsByTagName("tr")
            For Each trow In elem.getElementsByTagName("td")
                C = C + 1: Cells(R + 1, C) = trow.innerText
            Next trow
            C = 0: R = R + 1
        Next elem
    End With
End Sub

要添加的引用:

代码语言:javascript
运行
AI代码解释
复制
Microsoft HTML Object Library
Microsoft WinHTTP Services, version 5.1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50777294

复制
相关文章
快速搭建在线教育互动课堂
受疫情影响,今年以来学生由线下涌至线上,在线教育互动课堂迎来了一个大的爆发。但是自己开发一个互动课堂的门槛还是相当高的,本文主要介绍了使用腾讯云实时音视频TRTC + 即时通信IM的能力快速搭建一个在线教育互动课堂。
腾讯即时通信IM
2020/06/11
6.2K2
快速搭建在线教育互动课堂
高品质互动在线课堂:前端开发优化实践
大家好,感谢LiveVideoStack提供分享的机会,今天的分享主题是《高品质的互动在线课堂与开发实践》,是基于我公司的一个授课平台产品展开介绍的。首先,自我介绍下,我有着十多年的前后端开发经验,最近几年的重点在前端架构和前端技术体系搭建等工作,曾在途牛等互联网公司工作,现任TutorABC前端负责人。
LiveVideoStack
2021/09/02
1.2K0
高品质互动在线课堂:前端开发优化实践
腾讯课堂百万师生同时在线,如何实现消息的稳定互动?
导语:疫情期间,为了保障国内学子的正常学习进度,腾讯课堂积极响应国家“停工不停学”的号召,紧急上线疫情期间专用的“老师极速版”,使广大师生足不出户,即可快速便捷的完成线上开课。面对线上课堂百万量级的互动消息,如何保证消息的实时性和准确性无疑是一个技术挑战。那么如何解决问题呢?接下来,就和小编一起来看看腾讯云中间件CKafka如何为腾讯课堂百万级消息提供技术支撑。(编辑:中间件小Q妹)
腾讯云中间件团队
2021/03/24
1.5K0
腾讯课堂百万师生同时在线,如何实现消息的稳定互动?
互动课堂常见问题
可以开启屏幕分享这个桌面(摄像头+白板画面),然后旁路直播屏幕分享的流,也可以实现这个需求
腾讯云互动课堂团队
2020/07/09
1.4K0
CKafka如何助力腾讯课堂实现百万消息稳定互动?
两年前,腾讯在线教育部就在探索如何实现架构转型。在梳理过腾讯课堂初始技术架构的痛点后,规划出架构演进的三个重点方向:微服务、中间件、DevOps。
腾讯云开发者
2020/03/16
2.3K0
@所有老师,线上互动课堂轻松get!
疫情反复,全国多地重回“线上教学”,有的学生因居家隔离不能到校上课,还有地区整体停课,原本的教学进度都受到了一定影响。老师们不但迫切需要一款能保障疫情期间线上线下流畅授课的互动教学工具和相关的培训指导,还面临课堂管控困难、师生互动效果差等各方面难题。 为此,腾讯教育结合疫情2年来帮助数百万老师和2亿学生快速线上复课的实践经验,推出「小鹅云课」扩展应用,用最轻便的方式,还原线下教学场景,帮助老师将腾讯会议秒变线上互动课堂! 使用「小鹅云课」扩展应用 保障停课不停学线上授课体验 01 什么是小鹅云课扩展功能
鹅老师
2022/03/25
5.8K1
WebRTC直播课堂实践:实时互动是核心
大家好,我是来自七牛云的徐晶,非常荣幸可以跟大家分享我所做的一些项目和实践,本次我要分享的主要内容包括以下几个方面:
LiveVideoStack
2021/09/01
3.3K0
未来课堂:在线学习的兴起
目前,几乎所有的教育都在网上进行,这是必然的。然而,即使在COVID-19流感大流行结束后,网络教育的趋势仍将继续。
用户8054111
2021/01/02
6160
10秒在线开课 腾讯课堂“老师极速版”免费助力老师搭建在线课堂
“战疫”停课期间,学生正常学习进度受到影响,各大互联网教育平台纷纷推出在线开课助力。但老师们对线上授课较为陌生,下载入驻操作指引等步骤较为复杂。为解决老师线上操作难、开课慢的问题,腾讯课堂推出“老师极速版”,最快10秒生成老师的专属课堂。同时,也可分享授课链接邀请学生极速上课。 图:老师注册界面 课前,老师点击“开始上课”按钮进入上课状态,可以选择“屏幕分享授课”“PPT授课”“播放视频授课”“摄像头授课”四种上课形式。使用工具栏中的“签到”按钮,就可以向全体学生发布“签到”任务,了解学员到课情况
鹅老师
2020/06/10
1.3K0
“双减政策”下|教育行业如何实现TRTC互动课堂aPAAS解决方案?
导语 | 随着7月“双减政策”的落地,在线教育行业进入深度变革期,在学科辅导承压的同时,政策也给予了教育转型明确的建议,在教育部明确提出的7类转型建议中,素质教育、职业教育、教育出海最受到资本热捧,据相关机构测算,素质教育市场规模在2023年有望突破7000亿,职业教育有望突破5000亿,各大培训机构纷纷布局转型。推荐教培易产品解决方案
TCS-F
2021/11/15
2.4K0
“双减政策”下|教育行业如何实现TRTC互动课堂aPAAS解决方案?
《硅谷课堂——基于腾讯云产品搭建在线课堂》上线啦!
腾讯云与尚硅谷联合推出的精品项目课程《硅谷课堂——基于腾讯云产品搭建在线课堂》已上线“腾讯云开发者社区”。 硅谷课堂是一款基于微信公众号B2C模式的在线学习平台,此课程包含了如何应用腾讯云文件存储和视频点播服务、腾讯云CODING DevOps产品搭建在线学习平台。整套课程共28小时,通过系统化的理论讲解和上机演示为开发者提供完整的项目实战解析,帮助Java程序员积累项目经验。    干货满满,机构名师手把手教学,快来扫描二维码,领取全套课程!更有腾讯云产品免费试用等你领取!
腾讯云开发者
2022/08/26
2.1K0
《硅谷课堂——基于腾讯云产品搭建在线课堂》上线啦!
实时音视频开发学习1 - 音视频初体验
随着移动互联网速度越来越快的发展,实时音视频的发展也越来越收到重视。腾讯实时音视频(Tencent Real-Time Communication,TRTC)经过了10多年在网络音视频技术的发展与积累,并以多人音视频通话和低延时互动直播两大场景化方案,通过腾讯云服务向开发者开放,使得开发者能快速实现低成本、低延时、高品质的音频互动解决方案。
金林学音视频
2020/08/20
3.9K0
实时音视频开发学习1 - 音视频初体验
马拉松在线互动授课答疑精选
在很多场合这两者都可以混用,比如要用管道的形式结合很多命令进行处理的时候,在最开始使用cat或者less没有区别(如果文件非常大的话,cat的处理速度会比less稍微快一些)。其次是cat没法控制输出的数量,会把文件从头到尾给你打印一遍。而less却可以自由翻动,less的单行显示和打印行号的功能相对于cat都要好用一些。
生信技能树
2023/02/27
1K0
马拉松在线互动授课答疑精选
php实现在线考试系统【附源码】
说明:本篇文章是为了记录下学习开发思路,程序不具备商业价值,明白开发思路,商用需二次升级!
子润先生
2021/07/13
3.4K0
Current Biology:真实课堂小组动态互动中脑同步活动跟踪
本研究通过便携式脑电图(EEG)同时记录了12名高中学生在常规课堂活动中的大脑活动,并通过一种新颖分析技术--完全相互依赖(total interdependence ,TI)--来评估群体神经一致性,结果表明学生大脑活动同步程度可以预测学生课堂参与度和社会动态,脑同步可能是由共同注意驱动的动态社交互动神经标记。同时这项研究验证了在自然环境中研究群体互动神经机制的一种有效方法。文章发表在Current Biology杂志。
用户1279583
2020/07/28
1.4K0
Current Biology:真实课堂小组动态互动中脑同步活动跟踪
在线 PHP运行工具实现思路及源码
不知道大家有没有看到过这样的一个网站。名字是“菜鸟工具”,里面有很多的在线编辑,在线运行的小工具,实用也很方便。(嘻嘻,不是打广告哈,不过确实很实用)。
王图思睿
2021/06/15
2.6K0
在线 PHP运行工具实现思路及源码
在线教育平台开发中,课堂测试功能是如何实现的
课堂测试发布是在线教育平台中一项不可或缺的功能。课堂测试问卷可自定义多种题型,并且讲师能在开课前预设问卷,在上课过程中随时调用。那么在在线教育平台开发过程中,课堂测试功能是如何通过代码实现的?
万岳教育系统
2020/07/10
1K0
在线教育平台开发中,课堂测试功能是如何实现的
OMI 在线互动教程上线,趣味学习 Web Components
可以通过 omijs.org  或者 https://tencent.github.io/omi/ 找到入口。 动机 随着 IE 浏览器离我们远去,Web Components 的在浏览器端支持率越来越高。比如主流浏览器的新版本都支持: Safari 10+, IE 11+, Chrome, Firefox 和 Edge。来自大公司基于 Web Components 的框架有 google 的 Lit、microsoft 的 fast 以及 Tencent 的 OMI 等。 OMI 框架 OMI 是前
腾讯开源
2022/08/26
7320
OMI 在线互动教程上线,趣味学习 Web Components
点击加载更多

相似问题

ticsdk在线教育互动课堂 web端怎么实现?

1397

TRTC如何实现实时互动课堂功能?

1225

互动课堂大小课切换的实现思路?

0234

试用腾讯云互动课堂,无法创建课堂?

0699

腾讯在线教育互动课堂集成问题,请求大神解答,急?

1478
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档