programing

html 페이지의 모든 링크를 가져오시겠습니까?

mbctv 2023. 9. 3. 21:05
반응형

html 페이지의 모든 링크를 가져오시겠습니까?

저는 작은 취미 프로젝트를 하고 있습니다.나는 이미 url을 얻고, 헤더를 다운로드하고, mime 유형/콘텐츠 유형을 반환하기 위한 코드를 작성했습니다.

그러나, 이 전 단계는 태그 내부 및 따옴표와 같은 페이지의 모든 URL 내용을 검색해야 합니다.

...
<link rel='shortcut icon' href="/static/favicon.ico" type="image/x-icon" />
...

즐겨찾기 링크를 찾을 수 있습니다.

.net 라이브러리에 도움이 되는 것이 있습니까? 아니면 이것이 regex의 경우가 되어야 합니까?

Html Agility Pack을 사용하고 싶습니다.

다음은 페이지의 모든 링크를 찾는 방법에 대한 예제 페이지의 직접적인 예입니다.

 HtmlWeb hw = new HtmlWeb();
 HtmlDocument doc = hw.Load(/* url */);
 foreach(HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
 {

 }

HTML 민첩성 팩을 사용해야 합니다.

예:

var doc = new HtmlWeb().Load(url);
var linkTags = doc.DocumentNode.Descendants("link");
var linkedPages = doc.DocumentNode.Descendants("a")
                                  .Select(a => a.GetAttributeValue("href", null))
                                  .Where(u => !String.IsNullOrEmpty(u));

BCL에 내장된 것은 없지만 다행히 HTML 민첩성 팩을 사용하여 이 작업을 매우 간단하게 수행할 수 있습니다.

구체적인 문제에 대해서는 HtmlAgilityPack을 사용하여 html 조각에서 링크를 쉽게 추출하기를 참조하십시오.

private List<string> ExtractAllAHrefTags(HtmlDocument htmlSnippet)
{
    List<string> hrefTags = new List<string>();

    foreach (HtmlNode link in htmlSnippet.DocumentNode.SelectNodes("//a[@href]"))
    {
        HtmlAttribute att = link.Attributes["href"];
        hrefTags.Add(att.Value);
    }

    return hrefTags;
}

Regex는 어때요?

<(a|link).*?href=(\"|')(.+?)(\"|').*?>

깃발을 들고IgnoreCase그리고.SingleLine

systemtextregularexpressions.com regex.dll의 데모를 참조하십시오.

언급URL : https://stackoverflow.com/questions/2248411/get-all-links-on-html-page

반응형