我正在做一个小项目,我遇到了一些问题,希望你能帮助我。
我有一些基本的几行加载给定的URL并取出一些标记:
var webGet2 = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = webGet2.Load(pattern);
var htmlMatches = doc.DocumentNode.SelectNodes("//li[@class=''] | //li[@class='f']");
收到收藏后,我需要运行一个foreach循环 可以使用所有 href 和 src 链接并使其有效,因为当我下载源代码时,链接看起来像 / folder / folder / image .JPG 我想在每个链接之前添加 http://www.site.com 。
我用Regex构建这个项目并没有遇到任何问题,但是凭借HTML敏捷性,我的想法并没有直截了当。
谢谢!
答案 0 :(得分:3)
所以你想在某些节点中搜索包含相对URL的某些属性并将它们更改为绝对URL?你可以这样做:
static void AdjustAttributes(HtmlNode root, string baseUrl, string attrName)
{
var query =
from node in root.Descendants()
let attr = node.Attributes[attrName]
where attr != null
select attr;
foreach (var attr in query)
{
var url = GetAbsoluteUrlString(baseUrl, attr.Value);
attr.Value = url;
}
}
static string GetAbsoluteUrlString(string baseUrl, string url)
{
var uri = new Uri(url, UriKind.RelativeOrAbsolute);
if (!uri.IsAbsoluteUri)
uri = new Uri(new Uri(baseUrl), uri);
return uri.ToString();
}
var web = new HtmlWeb();
var doc = web.Load(pattern);
var selectedNodes = doc.DocumentNode.SelectNodes("//li[@class=''] | //li[@class='f']");
foreach (var node in selectedNodes)
{
AdjustAttributes(node, url, "href");
AdjustAttributes(node, url, "src");
}