在使用带有HTML Agility Pack的C#时,无法从NBA.com检索镜头位置数据

时间:2013-04-08 01:42:09

标签: c# web-scraping html-agility-pack

我想从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

1 个答案:

答案 0 :(得分:0)

您提供的链接返回的HTML没有任何带有CLASS ='homeShot made'的DIV。如果您使用浏览器检查HTML,那么您正在查看DOM的内存中表示,而不是文件的内容。 Html Agility Pack只处理原始HTML输入,它不是浏览器。

如果您执行了查看源,则可以确认。

因此,如果内容是由某些javascript代码构建的,则必须使用嵌入式浏览器控件,而不是静态工具,例如Html Agility Pack。