2013-08-21 2 views
0

HTMLagilitypack을 사용하여 웹 페이지의 모든 콘텐츠를 추출하려고합니다.웹 페이지에서 콘텐츠 추출 중

foreach (HtmlTextNode node in doc.DocumentNode.SelectNodes("//text()")) 
{ 
    sb.AppendLine(node.Text); 
} 

위의 코드를 사용하여 google.com을 구문 분석하면 많은 자바 스크립트가 생성됩니다. 내가 원하는 건 h 또는 p 태그와 같은 웹 페이지의 콘텐츠를 추출하는 것입니다. 질문을하고 답변을하고,이 페이지에 의견을 남기고 다른 모든 것을 제거하는 것과 같습니다.

저는 XPath를 처음 접했고 앞으로 나아갈 곳을 정확히 모릅니다. 그래서 어떤 도움을 주시면 감사하겠습니다.

+0

확인을 건너 뛰고 innerText와'script'의 '스타일'도 반환되었습니다. 그래서 그 스크립트와 스타일의 제거가 필요한 모든 신용이 사람에게 가야합니다. (링크) (http://stackoverflow.com/a/2785108/1762761) –

+0

나는 HTMLagilitypack에 익숙하지 않지만, 저에게 이상한 소리를 들려줍니다. ** ** text() ** 노드의 텍스트 **. ** SelectNodes ("// * [text()]") **를 사용하여 텍스트 노드가있는 모든 노드를 가져올 수 있습니다. – jvverde

답변

0

원하지 않는 태그를 이름으로 필터링하고 문서에서 태그를 제거 할 수 있습니다.

 doc = page.Load("http://www.google.com"); 
     doc.DocumentNode.Descendants().Where(n => n.Name == "script" || n.Name == "style").ToList().ForEach(n => n.Remove()); 
+0

그건 내가 h1 태그 만 선택하고 싶지 않아. 오히려 전체 페이지에서 텍스트를 선택하고 싶습니다. 나는 텍스트 텍스트 추출을 위해 생각할 수있는 모든 태그 조합을 다룰 수 없을 것이라고 생각합니다. –

+0

내 답변이 업데이트되었습니다. –

0

이 XPath 식을 사용할 수 있습니다

//body//*[local-name() != 'script']/text() 

그것은 body 내부 요소 만 소요를하고 문제가 내가 가졌다 있도록 script 요소

관련 문제