我一直在尝试使用 HtmlAgilityPack 从网站获取数据
I've been triying to get data from website with HtmlAgilityPack
首先,我尝试了很多方法都无法解决我的问题。我不知道如何将我的节点方式放在 SelectSingleNode(?) 方法中。我在我的 c# 代码中创建了一个 html 路径来到达我的节点,但是如果我 运行 这段代码,我会因为我的 html 路径而采用 NullReferenceException。我只想告诉你我如何创建我的 html 方式或任何其他解决方案?
这是 html 代码的示例:
<html>
<body>
<div id="container">
<div id="box">
<div class="box">
<div class="boxContent">
<div class="userBox">
<div class="userBoxContent">
<div class="userBoxElement">
<ul id ="namePart">
<li>
<span class ="namePartContent>
</span>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
这是我的 C# 代码:
namespace AgilityTrial
{
class Program
{
static void Main(string[] args)
{
Uri url = new Uri("https://....");
WebClient client = new WebClient();
client.Encoding = Encoding.UTF8;
string html = client.DownloadString(url);
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
string path = @"//html/body/div[@id='container']/div[@id='classifiedDetail']"+
"/div[@class='classifiedDetail']/div[@class='classifiedDetailContent']"+
"/div[@class='classifiedOtherBoxes']/div[@class='classifiedUserBox']"+
"/div[@class='classifiedUserContent']/ul[@id='phoneInfoPart']/li"+
"/span[@class='pretty-phone-part show-part']";
var tds = doc.DocumentNode.SelectSingleNode(path);
var date = tds.InnerHtml;
Console.WriteLine(date);
}
}
}
以您的namePartContent
跨度节点为例。如果您想获取该数据,您只需这样做:
doc.DocumentNode.SelectSingleNode(".//span[@class='namePartContent']")?.InnerText;
它将 search/fetch 一个以 namePartContent
作为其 class 的单个跨度节点,从根节点开始,在您的情况下 <html>
;
首先,我尝试了很多方法都无法解决我的问题。我不知道如何将我的节点方式放在 SelectSingleNode(?) 方法中。我在我的 c# 代码中创建了一个 html 路径来到达我的节点,但是如果我 运行 这段代码,我会因为我的 html 路径而采用 NullReferenceException。我只想告诉你我如何创建我的 html 方式或任何其他解决方案?
这是 html 代码的示例:
<html>
<body>
<div id="container">
<div id="box">
<div class="box">
<div class="boxContent">
<div class="userBox">
<div class="userBoxContent">
<div class="userBoxElement">
<ul id ="namePart">
<li>
<span class ="namePartContent>
</span>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
这是我的 C# 代码:
namespace AgilityTrial
{
class Program
{
static void Main(string[] args)
{
Uri url = new Uri("https://....");
WebClient client = new WebClient();
client.Encoding = Encoding.UTF8;
string html = client.DownloadString(url);
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
string path = @"//html/body/div[@id='container']/div[@id='classifiedDetail']"+
"/div[@class='classifiedDetail']/div[@class='classifiedDetailContent']"+
"/div[@class='classifiedOtherBoxes']/div[@class='classifiedUserBox']"+
"/div[@class='classifiedUserContent']/ul[@id='phoneInfoPart']/li"+
"/span[@class='pretty-phone-part show-part']";
var tds = doc.DocumentNode.SelectSingleNode(path);
var date = tds.InnerHtml;
Console.WriteLine(date);
}
}
}
以您的namePartContent
跨度节点为例。如果您想获取该数据,您只需这样做:
doc.DocumentNode.SelectSingleNode(".//span[@class='namePartContent']")?.InnerText;
它将 search/fetch 一个以 namePartContent
作为其 class 的单个跨度节点,从根节点开始,在您的情况下 <html>
;