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 dataNode = carResult.SelectSingleNode(".//div[@class='search-results-data']");

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

var carNameNode = dataNode.SelectSingleNode(".//h2/a");
string carName = carNameNode.InnerText.Trim();

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

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

var carPriceNode = dataNode.SelectSingleNode(".//div[@class='results-data-price-btn']/font");
string carPrice = carPriceNode.InnerText.Trim(); // this will give you AED 24,500. Perform some logic to split that up so you just have the number...a

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

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

var carImageNode = carResult.SelectSingleNode(".//div[@class='search-results-img']/descendant::img");
string carImageSource = carImageNode.GetAttributeValue("src", string.Empty);

다시 편집

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

var descriptionNode = rootNode.SelectSingleNode("//div[@id='description']");

var entireDescription = descriptionNode.InnerText.Trim();

var splitUpDescriptionParts =
    entireDescription.Split(
        new[]
            {
                "More Details about this Used Car:", "Body Condition:", "Mechanical Condition:", "Doors:", "Cylinders:", "Body Style:",
                "Drive Type:", "Warrenty:", "Description:"
            },
        StringSplitOptions.RemoveEmptyEntries).Select(s => s.Trim()).Where(s => !string.IsNullOrWhiteSpace(s));

string bodyCondition = splitUp.First();
string mechancialCondition = splitUp.ElementAt(1);
string amountOfDoors = splitUp.ElementAt(2);
string amountOfCylinders = splitUp.ElementAt(3);
string bodyStyle = splitUp.ElementAt(4);
string driveType = splitUp.ElementAt(5);
string warranty = splitUp.ElementAt(6);
string description = splitUp.Last();



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