HtmlAgilityPack C #을 사용한 내부 노드 데이터

.net c# html html-agility-pack parsing

문제

HtmlAgilityPack을 사용하여 웹 페이지에서 데이터 / 문자열을 읽습니다.

내 HTML은 바이올린에 있습니다.

http://jsfiddle.net/7DWfa/1/

여기 내 코드가있다.

HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
htmlDoc.OptionFixNestedTags = true;
HtmlNode.ElementsFlags.Remove("option");
htmlDoc.LoadHtml(s);
if (htmlDoc.DocumentNode != null){
HtmlAgilityPack.HtmlNode bodyNode = htmlDoc.DocumentNode.SelectSingleNode("//body");
if (bodyNode != null)
{//what to do here to get title and href?
var inputs = from input in htmlDoc.DocumentNode.Descendants("div")
                     where input.Attributes["class"].Value == "results-data-price-btn"
                     select input;

}
}

클래스를 통해 div 값을 얻는 방법을 알려주세요.

수락 된 답변

참고 : 아래는 테스트되지 않았으므로 페이지의 HTML을 살펴본 후 함께 사용하는 방법을 이해하려고했습니다.

각 자동차 '결과'에는 클래스 search-results-box 와 함께 divsearch-results-box . 그래서....

var rootNode = htmlDoc.DocumentNode;
var allCarResults = rootNode.SelectNodes("//div[normalize-space(@class)='search-results-box']");
foreach (var carResult in allCarResults)
{

}

당신은 각각의 '카 결과'를 가지고 있습니다 (각 항목은 이제 자동차 중 하나를 나타내는 전체 섹션입니다 ...).

이 각각의 내에서 자동차의 데이터는 클래스 search-results-data 와 함께 다른 div 내에 있습니다.

var rootNode = htmlDoc.DocumentNode;
var allCarResults = rootNode.SelectNodes("//div[normalize-space(@class)='search-results-box']");
foreach (var carResult in allCarResults)
{

}

안에, 당신은 지금에도 깊이 파고 것입니다. 자동차의 제목 은 특히 ​​어린이 h2 내의 다른 요소 내에 있습니다.

var rootNode = htmlDoc.DocumentNode;
var allCarResults = rootNode.SelectNodes("//div[normalize-space(@class)='search-results-box']");
foreach (var carResult in allCarResults)
{

}

HTML의 끔찍한 마크 업 덕분에 자동차 가격 이 가장 어렵습니다.

그것은 다른 div 안에있는 font 요소 안에 앉아 ...

var rootNode = htmlDoc.DocumentNode;
var allCarResults = rootNode.SelectNodes("//div[normalize-space(@class)='search-results-box']");
foreach (var carResult in allCarResults)
{

}

문제는 가격이 하나의 요소에 "AED 24,500"으로 고정되어 있다는 것입니다. 따라서 요소를 쉽게 얻을 수 있지만 숫자 만 원한다면 자신이해야 할 일을 파악해야합니다.

이미지 자체는 괜찮습니다. 그것은 마크 업에서 레벨 업입니다. 자동차에서 자녀로 백업합니다. carResult , 이렇게 위로 ..... :

var rootNode = htmlDoc.DocumentNode;
var allCarResults = rootNode.SelectNodes("//div[normalize-space(@class)='search-results-box']");
foreach (var carResult in allCarResults)
{

}

다시 편집

'이 중고차 정보에 대한 세부 정보'는 모두 한 곳으로 채워져 있으므로 아래의 내용은 귀하의 예에서는 효과 있지만 모두 작동하지는 않습니다.

var rootNode = htmlDoc.DocumentNode;
var allCarResults = rootNode.SelectNodes("//div[normalize-space(@class)='search-results-box']");
foreach (var carResult in allCarResults)
{

}



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