我想从NBA.com,CBSsports.com和espn.go.com等网站上的HTML网页中检索镜头位置数据集,然后进行一些数据分析。
我的问题是我无法检索我需要的数据,而在HTML Agility Pack的帮助下使用C#进行HTML抓取。
首先。例如,这是2013年4月7日LAL和LAC之间的CBS体育赛事跟踪器。链接地址是, http://www.cbssports.com/nba/gametracker/live/NBA_20130407_LAL@LAC。
我尝试在法庭图上捕捉那些红色X点和绿色O点的x和y坐标值。
(抱歉,由于声誉有限,我无法在此发布图片:()
Safari Web检查器用于随机获取其中一个点。它显示,
<div class="homeShot made" playerid="555969" period="1" type="1" ypos="-17" xpos="-1" result="1" time="4:37" distance="25" style="right: 165.53191489361703px; top: 161.6px; "></div>
注意到HTML中的“ypos”和“xpos”正是我想要的。
然后我使用C#和HTML Agility Pack来检索它们。
C#代码:
string link = "http://www.cbssports.com/nba/gametracker/live/NBA_20130407_LAL@LAC";
HtmlWeb hw = new HtmlWeb();
HtmlDocument doc = hw.Load(link);
HtmlNodeCollection items = doc.DocumentNode.SelectNodes("//div[@class= 'homeShot made']");
foreach (HtmlNode item in items)
{
// blablabla
}
但是Visual Studio中的错误消息弹出并告诉我“项目引用为空”。
如何以正确的方式解决这个问题?
二。另一个问题出在NBA.com上。 (抱歉,由于声誉有限,我无法发布第二个链接)
同样,Safari Web检查器用于随机获取其中一个红点和绿点。它显示,
<image x="385.12" y="218.3404255319149" width="16" height="16" preserveAspectRatio="none" href="/media/shotchart_legend_o.png"></image>
我注意到它在SVG中有限,
<svg height="613" version="1.1" width="652" xmlns="http://www.w3.org/2000/svg" style="overflow: hidden; position: relative; ">...</svg>
如何使用C#(带或不带HTML Agility Pack)获取所有x和y数据,如“x =”385.12“y =”218.3404255319149“”?
我感谢您的所有想法和帮助:D
答案 0 :(得分:0)
您提供的链接返回的HTML没有任何带有CLASS ='homeShot made'的DIV。如果您使用浏览器检查HTML,那么您正在查看DOM的内存中表示,而不是文件的内容。 Html Agility Pack只处理原始HTML输入,它不是浏览器。
如果您执行了查看源,则可以确认。
因此,如果内容是由某些javascript代码构建的,则必须使用嵌入式浏览器控件,而不是静态工具,例如Html Agility Pack。