gpt4 book ai didi

c# - Html Agility Pack Xpath 不工作

转载 作者:太空宇宙 更新时间:2023-11-03 12:11:55 26 4
gpt4 key购买 nike

所以当我尝试做的是使用 Html Agility Pack 解析 HTML 文档。我加载了 html 文档并且它有效。问题出在我尝试使用 XPath 解析它时。我收到“System.NullReferenceException:‘对象引用未设置到对象的实例。’”错误。

为了获取我的 xpath,我使用 Chrome 开发窗口并突出显示包含我要解析的数据的行的整个表,右键单击它并复制 Xpath。

这是我的代码

string url = "https://www.ctbiglist.com/index.asp";
string myPara = "LastName=Smith&FirstName=James&PropertyID=&Submit=Search+Properties";
string htmlResult;

// Get the raw HTML from the website
using (WebClient client = new WebClient())
{
client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";

// Send in the link along with the FirstName, LastName, and Submit POST request
htmlResult = client.UploadString(url, myPara);

//Console.WriteLine(htmlResult);
}

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(htmlResult);


HtmlNodeCollection table = doc.DocumentNode.SelectNodes("//*[@id=\"Table2\"]/tbody/tr[2]/td/table/tbody/tr/td/div[2]/table/tbody/tr[2]/td/table/tbody/tr[2]/td/form/div/table[1]/tbody/tr");

Console.WriteLine(table.Count);

当我运行这段代码时,它可以正常工作,但会抓取 HTML 文档中的所有表格。

var query = from table in doc.DocumentNode.SelectNodes("//table").Cast<HtmlNode>()
from row in table.SelectNodes("//tr").Cast<HtmlNode>()
from cell in row.SelectNodes("//th|td").Cast<HtmlNode>()
select new { Table = table.Id, CellText = cell.InnerText };

foreach (var cell in query)
{
Console.WriteLine("{0}: {1}", cell.Table, cell.CellText);
}

我想要的是一个特定的表,其中包含所有表行,这些行具有我要解析为对象的数据。

感谢帮助!!!

最佳答案

换行

from table in doc.DocumentNode.SelectNodes("//table").Cast<HtmlNode>()

from table in doc.DocumentNode.SelectNodes("//table[@id=\"Table2\"]").Cast<HtmlNode()

这只会选择具有给定 ID 的特定表。但是,如果您有嵌套的表格,那么您必须相应地更改您的 xpath 以获取嵌套的表格行。

关于c# - Html Agility Pack Xpath 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51791123/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com