div 안에있는 모든 링크를 가져 와서 목록에 저장하십시오.

c# html html-agility-pack

문제

WebClient 및 downloadString ()을 사용하여 html 사이트를 다운로드하고 그 사이의 모든 링크를 목록에 넣으려고합니다.

몇 번의 시도와 2 시간의 작업 후, 모든 링크를 얻은 1 번, 때로는 단지 하나를 얻고 때로는 아무 것도 얻지 못합니다.

다음은 내 코드 샘플입니다. 더 읽기 쉽도록 catch 블록을 제거했습니다.

List<string> getLinks = new List<string>();
for (int i = 0; i < wikiUrls.Length; i++)
{
    try
    {
        string download = client.DownloadString(wikiUrls[i]);
        string searchForDiv = "<div class=\"wiki\">";
        int firstCharacter = download.IndexOf(searchForDiv);
        //if wiki doens't exists, go to next element of for loop
        if (firstCharacter == -1)
            continue;
        else
        {
            HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
            document.LoadHtml(download);
            string nodes = String.Empty;
            var div = document.DocumentNode.SelectSingleNode("//div[@class=\"wiki\"]");
            if (div != null)
            {
                getLinks = div.Descendants("a").Select(node => node.GetAttributeValue("href", "Not found \n")).ToList(); 
                output.Text = string.Join(" ", getLinks);
            }
        }
    }

수락 된 답변

알았다. 왜냐하면

getLinks = div.Descendants("a").Select(node => node.GetAttributeValue("href", "Not found \n")).ToList();

GetLinks는 for 루프에 있기 때문에 항상 덮어 씁니다. 나는 이것으로 해결했다 :

getLinks.AddRange(div.Descendants("a").Select(node => node.GetAttributeValue("href", String.Empty)).ToList()); 


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.