0

我有一个问题,我的 xpath 无法正常工作。

我正在尝试从 Google.com 的搜索结果列表中获取 url 到一个字符串列表中。

但我无法使用 Xpath 访问 url。

请帮我纠正我的xpath。还告诉我应该在什么地方??

HtmlWeb hw = new HtmlWeb();
List<string> urls = new List<string>();
HtmlAgilityPack.HtmlDocument doc = hw.Load("http://www.google.com/search?q=" +txtURL.Text.Replace(" " , "+"));
HtmlNodeCollection linkNodes = doc.DocumentNode.SelectNodes("//div[@class='f kv']");
foreach (HtmlNode linkNode in linkNodes)
{
    HtmlAttribute link = linkNode.Attributes["?????????"];
    urls.Add(link.Value);

}
for (int i = 0; i <= urls.Count - 1; i++)
{
    if (urls.ElementAt(i) != null)
    {
        if (IsValid(urls.ElementAt(i)) != true)
        {
            grid.Rows.Add(urls.ElementAt(i));

        }
    }
}
4

2 回答 2

1

URL 似乎存在于citeselected s 下的元素中div,因此选择这些的 XPath 是//div[@class='f kv']/cite.

现在,由于这些包含标记但您只需要文本,请选择InnerText所选节点的。请注意,这些不以http://.

HtmlNodeCollection linkNodes = 
                       doc.DocumentNode.SelectNodes("//div[@class='f kv']/cite");
foreach (HtmlNode linkNode in linkNodes)
{
    HtmlAttribute link = linkNode.InnerText;
    urls.Add(link.Value);
}
于 2013-01-30T20:20:37.563 回答
0

正确的 XPath 是"//div[@class='kv']/cite". 您在浏览器元素检查器中看到的f类(可能)是在使用 javascript 呈现页面之后添加的。

此外,链接文本不在属性中,您可以使用在前面步骤中获得InnerText的元素的属性来获取它。<div>

我更改了这些行并且它有效:

var linkNodes = doc.DocumentNode.SelectNodes("//div[@class='kv']/cite");

foreach (HtmlNode linkNode in linkNodes)
{
    urls.Add(linkNode.InnerText);
}

不过有一个警告:一些链接被修剪(你会...在中间看到一个)

于 2013-01-30T20:23:04.323 回答