在GET之后获取返回JSON的站点HTML

时间:2015-11-21 14:35:34

标签: html json vba winhttprequest

简介

主要问题是向下,但我想在这种情况下有一些背景知识

好的,所以我想首先说这实际上是我关于stackoverflow的第一个问题 - 我已经使用这个网站多年了,我基本上学到了我所知道的关于编码的一切,但是意味着我的知识存在巨大差距 - 我选择使用的很多方法只是因为它们是我所知道的唯一方法 - 如果你有任何建议我如何改进下面描述的过程,请不要犹豫与我分享。如果我的要求以任何方式不清楚,我还要提前道歉,我会在任何此类情况下详细说明。

方法

我正试图抓住个别玩家'在欧洲冠军联赛比赛中的表现(我实际上正在建立一个梦幻足球应用程序,我认为这个项目在未来也会有很多问题)。我的来源是欧足联统计网站,例如: " http://www.uefa.com/uefachampionsleague/season=2016/matches/live/index.html?day=2&session=1&match=2015684&#34 ;.在那里,你可以选择" PLAYER"统计数据,并查看"表" (实际上它是带有列表的div),其中(默认情况下)显示有关给定(单个)匹配的统计信息。当在HTML中完全加载时,有两个div,一个用于匹配统计,一个用于整体,列表的一些元素被隐藏(例如,基于玩家的位置),但所有都在那里。我感兴趣的部分看起来像这样:

<div id="matchTab" class="tab-panel rounded-down scrollable ui-tabs-panel ui-widget-content ui-corner-bottom" aria-labelledby="ui-id-7" role="tabpanel" aria-expanded="true" aria-hidden="false">
<div class="tab-content">
<div class="col-stats">
<ul class="goals-table stats">
<li style="display: list-item;">
Goals scored
<span class="value goals-scored">1</span>
</li>
<li style="display: none;">
<li class="bg-highlight" style="display: none;">
<li style="display: none;">
<li class="bg-highlight" style="display: none;">
</ul>
<ul class="attempts-table stats" style="display: block;">
<ul class="passes-attempt-table stats">
<ul class="fouls-table fouls-table-gk stats">
</div>
<div class="col-stats">
</div>
</div>

(大部分代码已折叠)

现在我在VBA中使用WinHTTPRequest,希望用数据填充Excel范围,但最后我将项目移动到VB.NET并使用SQL。问题是我似乎无法获得列表中显示的日期。使用:

whReq.Open "GET", "http://www.uefa.com/uefachampionsleague/season=2016/matches/live/index.html?day=2&session=1&match=2015684"

仅返回边的主要结构,而不是&#34;表&#34;中的数据。因此,我使用FireBug,然后使用WireShark检查在选择中更改播放器时正在传输的数据。一个数据包是关于玩家,他的年龄,姓名等的一般统计数据 - 没用。第二个看起来像这样:

GET /livecommon/match-centre/cup=1/season=2016/round=2000634/player=103697/overall.json?v=1448115572662

(&#34; v&#34;参数实际上没用,没有它就会以同样的方式工作) 实际上确实返回了一堆数据。显然它是以JSON的形式出现的,例如:

{"Players":null,"OverallStat":{"250021048":{"PlayerId":250021048,"TeamId":0,"MatchesPlayed":3,"MinutesPlayed":188,"GoalsScored":0,"GoalsConceded":0,"GoalsByMinute":0,"GoalsByAttempts":0,"TotalAttempts":2,"Assist":0,"Saves":0,"SavesOnAttempts":0,"SavesByMinutes":0,"FoulsCommitted":3,"FoulsCommittedByMinute":63,"FoulsSuffered":0,"FoulsSufferedByMinute":0,"FoulsPenalty":0,"FoulsSuffPenalty":0,"YellowCard":0,"RedCard":0,"Passes":149,"PassingDistribution":0,"PassesCompleted":68,"PassesAttempted":81,"PassingAccuracy":84,"Delivery":0,"Run":2,"AttempsOn":0,"AttempsOff":2,"Offside":1,"ShotHittingPost":0,"HittingBar":0,"ShotBlocked":2,"Corners":0,"Attacks":0,"BigChance":0,"BallPossession":0,"DistanceCovered":18655,"ClearancesAttempted":4,"ClearancesCompleted":3,"Blocked":0,"TackleCompleted":0,"TackleWrong":0}},"LastUpdatedCET":"05 November 2015, 11:47 CET","LastUpdateDay":5,"LastUpdateMonth":11,"LastUpdateYear":2015,"LastUpdateHour":11,"LastUpdateMinute":47}

这就是每当玩家被改变时获得的响应,无论是单个匹配统计还是整体选择(当然不需要实际在网站上,不需要cookie,只需& #34; http://www.uefa.com/livecommon/match-centre/cup=1/season=2016/round=2000634/player=250021048/overall.json&#34;你有统计数据) 问题是,这些是整体统计数据。我可以理解有一些代码可以计算单个匹配的统计数据(我实际上可以自己做,只需在每次匹配后刷新数据以计算各个匹配的统计数据)。然而,他们倾向于不规则地更新统计数据,所以我更愿意能够从个别匹配中检索统计数据。所以:

问题

鉴于上述情况,有没有办法在玩家统计数据的另一个GET之后获取网站的html,使用WinHTTPRequest ?如果没有,那么最好的方法是什么?我确实尝试使用InternetExplorer对象,但根本无法产生任何结果(我实际上在工作中遇到了同样的问题,我需要访问我们公司的网站 - 我甚至无法检查readystate ,在网站上工作,但我想这是另一个问题的主题)

提前致谢,再次,对不起,如果我写的任何内容都不清楚。

0 个答案:

没有答案