在 html 标记 Xpath 和 HtmlAgility 之间获取值
本文关键字:之间 获取 HtmlAgility html 标记 Xpath | 更新日期: 2023-09-27 18:34:12
到目前为止,我正在尝试检索某个网站的HTML标签之间的文本......
例如,假设我需要提取这些 span 标签之间的文本,我将如何处理,我收到一个错误,指出"对象引用未设置为对象的实例"这里是 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);
}
我可以在这里得到一些帮助吗,我想提取"黑色的冲击波便携式无线扬声器"。
我建议使用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);
您的代码运行良好,但您必须加载正确的页面才能使其正常工作。您正在加载的页面使用 ajax 请求来加载您在浏览器中看到的结果。
因此,您必须使用以下方法,而不是您当前使用的URL:
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
。因此,您所要做的就是使用您的网址并在#
之后开始构建一个新网址。