Html敏捷包中的XPath表达式问题
我正在使用Html Agility Pack对谷歌搜索结果执行基本的web抓取。作为XPath的新手,我确保我的路径表达式是正确的(在FirePath的帮助下)。但是,返回的HtmlNodeCollection始终为空Html敏捷包中的XPath表达式问题,xpath,html-agility-pack,Xpath,Html Agility Pack,我正在使用Html Agility Pack对谷歌搜索结果执行基本的web抓取。作为XPath的新手,我确保我的路径表达式是正确的(在FirePath的帮助下)。但是,返回的HtmlNodeCollection始终为空 HtmlWeb web = new HtmlWeb(); HtmlAgilityPack.HtmlDocument htmlDoc = web.Load("http://www.google.com/search?num=10&q=Hello+World"); // g
HtmlWeb web = new HtmlWeb();
HtmlAgilityPack.HtmlDocument htmlDoc = web.Load("http://www.google.com/search?num=10&q=Hello+World");
// get search result URLs
var items = htmlDoc.DocumentNode.SelectNodes("//div[@id='ires']/ol[@id='rso']/li/div[@class='vsc']/h3/a/@href");
foreach (HtmlNode node in items)
{
Console.WriteLine(node.Attributes);
}
我错过什么了吗?谁能给我点化一下吗
提前感谢,HAP只能处理从url返回的原始HTML,它不会运行页面上的任何其他javascript或诸如此类的内容。您需要相应地调整查询 在原始HTML中,
ires
div存在,但是在运行javascript之前,rso
不会被插入,因此不会得到任何结果。这里还有其他一些转换,您也需要进行调整
下面是HTML的一个片段:
<div id="ires">
<ol>
<li class="g">
<h3 class="r">
<a href="...">...</a>
使用
g
类更容易找到所有li
,因为它们对应于所有结果。您需要使用r
类过滤所有h3
,否则您将包含其他结果(例如图像结果)。您太棒了,杰夫。非常感谢。
var xpath = "//li[contains(concat(' ',@class,' '),' g ')]" +
"/h3[contains(concat(' ',@class,' '),' r ')]" +
"/a/@href";