2

到目前为止,我正在尝试检索某个网站的 HTML 标记之间的文本....

举例来说,我需要提取这些跨度标签之间的文本我将如何处理,我收到一条错误消息,指出“对象引用未设置为对象的实例”这里是 HTML

在此部分之前还有 HTML 代码;我不知道这是否应该有所作为。

<div class="thumbnail-details">
<ul>
    <li> … </li>
    <li class="product-title">
        <span class="thumbnail-details-grey">The Blaster Portable Wireless Speaker in Black</span>
    </li>
    <li> … </li>
</ul>
</div>

到目前为止,我的 C# 代码是

    HtmlWeb hw = new HtmlWeb();
        HtmlAgilityPack.HtmlDocument htmlDoc = hw.Load(@"http://www.karmaloop.com/Browse.htm#Pgroup=1");
        if (htmlDoc.DocumentNode != null)
        {
            foreach (HtmlNode text in htmlDoc.DocumentNode.SelectNodes("//span[@class='thumbnail-details-grey']/text()"))
            {
                Console.WriteLine(text.InnerText);
            }

我可以在这里寻求帮助吗,我想提取“The Blaster Portable Wireless Speaker in Black”。

4

2 回答 2

1

我建议使用 CsQuery (https://www.nuget.org/packages/CsQuery/1.3.4),然后它很简单:

var doc = CQ.CreateFromUrl(@"http://www.karmaloop.com/Browse.htm");
var nodes = doc.Find("span.thumbnail-details-grey");
foreach(var node in nodes)
    Console.WriteLine(node.InnerText);
于 2013-10-07T18:31:38.080 回答
0

您的代码可以正常工作,但您必须加载正确的页面才能使其正常工作。您正在加载的页面使用 ajax 请求来加载您在浏览器中看到的结果。

因此,您必须使用以下网址,而不是您当前使用的网址:

HtmlDocument htmlDoc = hw.Load(@"http://www.karmaloop.com/Browse?Pgroup=1&ajax=true&version=2");

然后你的代码工作。我仍在寻找将这个请求放在一起的地方......

但是查询看起来很容易猜到。例如页面http://www.karmaloop.com/Browse.htm#Pdept=11&PageSize=30&Pgroup=1请求 url http://www.karmaloop.com/Browse?Pdept=11&PageSize=30&Pgroup=1&ajax=true&version=2。因此,您所要做的就是使用您的 url 并在#.

于 2013-10-07T19:44:02.770 回答