【问题标题】:Trouble Scraping .HTM File抓取 .HTM 文件时遇到问题
【发布时间】:2010-10-21 03:26:09
【问题描述】:

我刚刚开始从网页上抓取基本文本,目前正在使用 HTMLAgilityPack C# 库。我在从竞争对手.yahoo.com 获得的 boxscores 上取得了一些成功(体育是我的事,所以为什么不抓取一些有趣的东西呢?)但我被困在 NHL 的游戏摘要页面上。我认为这是一个有趣的问题,所以我会在这里发布。

我正在测试的页面是: http://www.nhl.com/scores/htmlreports/20102011/GS020079.HTM

乍一看,它似乎是基本文本,没有 ajax 或其他东西来搞乱基本的爬虫。然后我意识到由于一些javascript,我无法右键单击,所以我解决了这个问题。我在firefox中右键单击并使用XPather获取主队的xpath,我得到:

/html/body/table[@id='MainTable']/tbody/tr[1]/td/table[@id='StdHeader']/tbody/tr/td/table/tbody/tr/td[3]/table[@id='Home']/tbody/tr[3]/td

当我尝试抓取该节点/内部文本时,htmlagilitypack 找不到它。有没有人在页面的源代码中看到任何可能阻止我的奇怪之处?

我是新手,仍在学习人们如何阻止我抓取,任何提示或技巧都非常感谢!

附言我遵守所有关于机器人等的网站规则,但我注意到这种奇怪的行为并将其视为一项挑战。

【问题讨论】:

  • 很好,感谢有关 XPather 的提示,将不得不使用。
  • 其他人可以到该页面并尝试获取主队的 xpath(右上角的哥伦布)并将其粘贴到此处以便我进行比较吗?

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


【解决方案1】:

好的,看来我的 xpath 中有 tbody。当我从 xpath 中手动删除这些 tbody 时,HTMLAgilityPack 可以很好地处理它。

我仍然想知道为什么我得到无效的 xpath,但现在我已经回答了我的问题。

【讨论】:

  • 可能与浏览器或 xpather 应用程序有关,我去看看听起来很有趣。
【解决方案2】:

我认为,除非我的 xpath 知识存在大量缺陷(可能),否则问题出在 xpath 表达式中的 /tbody 节点。

当我这样做时

 string test = string.Empty;
StreamReader sr = new StreamReader(@"C:\gs.htm");
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.Load(sr);
sr.Close();
sr = null;
string xpath = @"//table[@id='Home']/tr[3]/td";
test = doc.DocumentNode.SelectSingleNode(xpath).InnerText;

效果很好..返回一个
“哥伦布蓝夹克第 5 场主场比赛 3”
我希望是你想要的字符串。

检查 html 我找不到 /tbody。

【讨论】:

    猜你喜欢
    • 2016-08-01
    • 1970-01-01
    • 2017-01-14
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多