HtmlAgilityPack-从特定表中提取链接
本文关键字:提取 链接 HtmlAgilityPack- | 更新日期: 2024-09-23 20:30:57
我很难找到解析网站链接的确切方法。使用firebug,表的确切xPath是:
/html/body/div/form/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr[1]/td/table/tbody/tr/td/table/tbody/tr[2]/td/table/tbody/tr[1]/td/div/table/tbody/tr[3]/td/div/table/tbody/tr/td/div/table
它还有一个id='ctl00_cp1_GridView1'(这并没有什么帮助)。
我想做的就是找到第一个中的所有链接,并将它们添加到列表中。
这是我当前的代码片段(在这篇文章的帮助下:
protected void btnSubmitURL_Click(object sender, EventArgs e)
{
try
{
List<string> siteList = new List<string>();
int counter = 1;
var web = new HtmlWeb();
var doc = web.Load(txtURL.Text);
var table = doc.DocumentNode.SelectSingleNode("html/body/div/form/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr[1]/td/table/tbody/tr/td/table/tbody/tr[2]/td/table/tbody/tr[1]/td/div/table/tbody/tr[3]/td/div/table/tbody/tr/td/div/table[@id='ctl00_cp1_GridView1']/tbody");
HtmlNodeCollection rows = table.SelectNodes("./tr");
if (rows != null)
{
for (int i = 0; i < rows.Count; i++)
{
HtmlNodeCollection cols = rows[i].SelectNodes("./td[1]");
if (cols != null)
{
for (int j = 0; j < cols.Count; j++)
{
HtmlNode aTags = cols[i].SelectSingleNode("./a[@id='NormalColoredFont']");
if (aTags != null)
{
siteList.Add(counter + ". " + aTags.InnerHtml + " - " + aTags.Attributes["href"].Value);
}
}
}
}
}
lblOutput.Text = siteList.Count.ToString();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
我一直在HtmlNodeCollection行中得到一个Null Exception错误,因为它找不到那个特定的表。我尝试过通过表id进行搜索,但这也没有帮助。
如有任何帮助,我们将不胜感激。
我最终能够使用Scott Mitchell的示例提取所有链接。他的例子如下:
var linksOnPage = from lnks in document.DocumentNode.Descendants()
where lnks.Name == "a" &&
lnks.Attributes["href"] != null &&
lnks.InnerText.Trim().Length > 0
select new
{
Url = lnks.Attributes["href"].Value,
Text = lnks.InnerText
};
感谢jessehouwing和casperOne的快速响应!