HtmlAgilityPack 多元素
HtmlAgilityPack multiple element
我有一个 html 文档,其中包含多个 div
示例:
<div class="element">
<div class="title">
<a href="127.0.0.1" title="Test>Test</a>
</div>
</div>
现在我正在使用这段代码来提取标题元素。
List<string> items = new List<string>();
var nodes = Web.DocumentNode.SelectNodes("//*[@title]");
if (nodes != null)
{
foreach (var node in nodes)
{
foreach (var attribute in node.Attributes)
if (attribute.Name == "title")
items.Add(attribute.Value);
}
}
我不知道如何调整我的代码来提取 href 和 title 元素
同时
每个 div 应该是一个 object,包含一个标签作为属性。
public class CheckBoxListItem
{
public string Text { get; set; }
public string Href { get; set; }
}
您可以使用以下 xpath 查询仅检索带有标题和 href 的标签:
//a[@title and @href]
您可以像这样使用您的代码:
List<CheckBoxListItem> items = new List<CheckBoxListItem>();
var nodes = Web.DocumentNode.SelectNodes("//a[@title and @href]");
if (nodes != null)
{
foreach (var node in nodes)
{
items.Add(new CheckBoxListItem()
{
Text = node.Attributes["title"].Value,
Href = node.Attributes["href"].Value
});
}
}
我经常使用 ScrapySharp 的包和 HtmlAgilityPack 一起使用 css 选择。
(为 ScrapySharp.Extensions 添加 using 语句,以便您可以使用 CssSelect 方法)。
using HtmlAgilityPack;
using ScrapySharp.Extensions;
对于你的情况,我会这样做:
HtmlWeb w = new HtmlWeb();
var htmlDoc = w.Load("myUrl");
var titles = htmlDoc.DocumentNode.CssSelect(".title");
foreach (var title in titles)
{
string href = string.Empty;
var anchor = title.CssSelect("a").FirstOrDefault();
if (anchor != null)
{
href = anchor.GetAttributeValue("href");
}
}
我有一个 html 文档,其中包含多个 div
示例:
<div class="element">
<div class="title">
<a href="127.0.0.1" title="Test>Test</a>
</div>
</div>
现在我正在使用这段代码来提取标题元素。
List<string> items = new List<string>();
var nodes = Web.DocumentNode.SelectNodes("//*[@title]");
if (nodes != null)
{
foreach (var node in nodes)
{
foreach (var attribute in node.Attributes)
if (attribute.Name == "title")
items.Add(attribute.Value);
}
}
我不知道如何调整我的代码来提取 href 和 title 元素 同时
每个 div 应该是一个 object,包含一个标签作为属性。
public class CheckBoxListItem
{
public string Text { get; set; }
public string Href { get; set; }
}
您可以使用以下 xpath 查询仅检索带有标题和 href 的标签:
//a[@title and @href]
您可以像这样使用您的代码:
List<CheckBoxListItem> items = new List<CheckBoxListItem>();
var nodes = Web.DocumentNode.SelectNodes("//a[@title and @href]");
if (nodes != null)
{
foreach (var node in nodes)
{
items.Add(new CheckBoxListItem()
{
Text = node.Attributes["title"].Value,
Href = node.Attributes["href"].Value
});
}
}
我经常使用 ScrapySharp 的包和 HtmlAgilityPack 一起使用 css 选择。
(为 ScrapySharp.Extensions 添加 using 语句,以便您可以使用 CssSelect 方法)。
using HtmlAgilityPack;
using ScrapySharp.Extensions;
对于你的情况,我会这样做:
HtmlWeb w = new HtmlWeb();
var htmlDoc = w.Load("myUrl");
var titles = htmlDoc.DocumentNode.CssSelect(".title");
foreach (var title in titles)
{
string href = string.Empty;
var anchor = title.CssSelect("a").FirstOrDefault();
if (anchor != null)
{
href = anchor.GetAttributeValue("href");
}
}