나는 작은 프로젝트에서 일하고 있는데, 약간의 문제가있어, 당신이 나를 도울 수 있기를 바랍니다.
주어진 URL을로드하고 몇 개의 태그를 꺼내는 몇 줄의 기본 코드가 있습니다.
var webGet2 = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = webGet2.Load(pattern);
var htmlMatches = doc.DocumentNode.SelectNodes("//li[@class=''] | //li[@class='f']");
콜렉션을받은 후 모든 href 및 src 링크를 가져 와서 유효하게 만드는 foreach 루프를 실행해야합니다. 소스를 다운로드 할 때 링크가 /folder/folder/image.jpg 처럼 보이기 때문입니다. 각 링크 앞에 http://www.site.com 을 추가하고 싶습니다.
Regex를 사용하여이 프로젝트를 구축했지만 아무런 문제가 없었지만 HTML 민첩성으로 인해 내 마음이 바뀌지 않았습니다.
고맙습니다!
따라서 상대 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");
}