0

我想从 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 网络检查器用于随机获取这些点之一。表明,

<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 网络检查器用于随机获取这些红点和绿点之一。表明,

<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

4

1 回答 1

0

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

如果您查看源代码,则可以确认。

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

于 2013-04-08T06:04:54.757 回答