모두 선택

HTMLAgilityPack을 사용하는 노드의 자식에서 가져온 것

c# html-agility-pack screen-scraping

문제

html 페이지를 가져 오는 데 사용하는 다음 코드가 있습니다. URL을 절대적으로 만든 다음 링크 rel을 nofollow로 만들고 새 창 / 탭에서 엽니 다. 내 문제는 <a> s에 속성을 추가하는 것입니다.

        string url = "http://www.mysite.com/";
        string strResult = "";            

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        if ((request.HaveResponse) && (response.StatusCode == HttpStatusCode.OK)) {
            using (StreamReader sr = new StreamReader(response.GetResponseStream())) {
                strResult = sr.ReadToEnd();
                sr.Close();
            }
        }

        HtmlDocument ContentHTML = new HtmlDocument();
        ContentHTML.LoadHtml(strResult);
        HtmlNode ContentNode = ContentHTML.GetElementbyId("content");

        foreach (HtmlNode node in ContentNode.SelectNodes("/a")) {
            node.Attributes.Append("rel", "nofollow");
            node.Attributes.Append("target", "_blank");
        }

        return ContentNode.WriteTo();

누구든지 내가 뭘 잘못하고 있는지 알 수 있니? 행운을 빌어 여기에 잠시 노력 해보세요. 이 코드는 ContentNode.SelectNodes ( "/ a")가 객체의 인스턴스로 설정되어 있지 않습니다. 그래도 증기를 0으로 설정하려고합니까?

건배, 데니스

수락 된 답변

ContentNode null입니까? "//*[@id='content']" 쿼리를 사용하여 single을 선택해야 할 수도 있습니다.

정보의 경우 "/a" 는 루트에있는 모든 앵커 의미합니다. "descendant::a" 작동합니까? 더 쉬울 수도있는 HtmlElement.GetElementsByTagName 도 있습니다. 즉 yourElement.GetElementsByTagName("a") 입니다.



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