HTML解析器无法在网页上查找表元素

时间:2014-02-21 15:15:40

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

我正在尝试使用此页面:// * [@ id =“table-matches”] / table:http://www.oddsportal.com/matches/soccer/20140221/

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

我尝试在C#中使用HtmlAgilityPack获取此文档,我可以找到'div'元素,但它表示它没有任何子节点(应该有一个表子节点)。如果我尝试获取表,结果为null。这是代码:

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元素(但它没有子节点),表变量为null,甚至table2变量包含4个元素,但它们都不是所需的表。

我认为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 -->

1 个答案:

答案 0 :(得分:0)

表加载了JavaScript(可能使用AJAX),因此您无法使用webGet.Load()获取它。您只获得服务器返回的HTML。

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

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