【问题标题】:HTML parsers not finding table element on a web pageHTML 解析器在网页上找不到表格元素
【发布时间】:2014-03-23 04:29:07
【问题描述】:

我正在尝试访问此元素://*[@id="table-matches"]/此页面上的表:http://www.oddsportal.com/matches/soccer/20140221/

我想获取包含匹配项的表。表格在开始时间选项卡下开始。我正在寻找的元素是'table class="table-main"',它位于元素'div id="table-matches" style="display: block;"'中

我尝试在 C# 中使用 HtmlAgilityPack 获取此文档,我可以找到“div”元素,但它说它没有任何子节点(应该有一个表子节点)。如果我尝试获取表格,则结果为空。代码如下:

var webGet = new HtmlWeb();
var document = webGet.Load("http://www.oddsportal.com/matches/soccer/20140221/");
var div = document.DocumentNode.SelectNodes("//div[@id='table-matches']");
var table = document.DocumentNode.SelectNodes("//*[@id='table-matches']/table");
var table2 = document.DocumentNode.SelectNodes("//table");

所以,div 变量包含 div 元素(但它没有子节点),table 变量为 null,即使 table2 变量包含 4 个元素,但它们都不是所需的 table。

我认为 HtmlAgilityPack 存在问题,并尝试使用 Python 获取整个网页。所以我在一个文本文件中获取了整个 HTML 文档并搜索了该文本文件,我可以找到 div 元素,但它是空的。里面没有表格元素。这是为什么?为什么我在chrome或internet explorer中可以看到table元素,但是我下载html的时候却没有这个元素?

这是python代码:

url = urllib.urlopen("http://www.oddsportal.com/matches/")
document = url.read()
htmlOddsPortal = open("htmlOddsPortal.txt", "w")
htmlOddsPortal.write(document)

这是最终文本文档中的元素:

<div id="table-matches"></div>                    <!--  END PAGE BODY -->

【问题讨论】:

    标签: c# python html parsing html-agility-pack


    【解决方案1】:

    表是用 JavaScript 加载的(可能是用 AJAX),所以你不会用 webGet.Load() 得到它。您只会得到服务器作为响应返回的 HTML。

    如果您(在 Chrome 中)打开控制台 (F12),单击“设置”并选中“禁用 JavaScript”,然后刷新页面,则可以检查此项。您将看到空白内容。

    我有同样的问题,但我在 java 中工作,我使用 HTMLUnit 来解决这个问题。可能有类似的 C# 工具,或者您可以检查 HtmlAgilityPack 是否能够进行异步调用或类似 WebBrowser 组件。

    【讨论】:

    • 感谢您的回答。我最终在 Windows 窗体中使用了 WebBrowser。以下是供以后参考的代码:webBrowser.Navigate("oddsportal.com/matches/soccer/20140221/"); HtmlElementCollection elements = webBrowser.Document.GetElementsByTagName("table");
    猜你喜欢
    • 2021-01-24
    • 2019-04-16
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 2019-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多