HtmlAgilityPack은 클래스 속성이 동적으로 추가 된 html 노드에서 텍스트를 추출하는 방법

html-agility-pack

문제

친애하는 친구, amazon.cn에서 발췌 한이 코드 세그먼트에서 텍스트 å¹³å ‡3.6 星 ~를 추출하고 싶습니다.

<div class="content"><ul>
<li><b>用户评分:</b>
<span class="crAvgStars" style="white-space:no-wrap;">
<span class="asinReviewsSummary" ref="dp_db_cm_cr_acr_pop_" name="B004GUSIKO">
<a>
  <span class="swSprite s_star_3_5 " title="平均3.6 星">
  <span>平均3.6 星</span>
  </span>
</a>

내 질문은 스팬 클래스 태그 값 "s_star_3_5 " 은 고객의 등급에 따라 다르며 동적으로 추가되었습니다. 그래서 doc.DocumentNode.SelectSingleNode(" //span[@class='swSprite']").InnerText 또는 //span[@class='swSprite s_star_3_5 '] 를 사용하려고 시도하지만 결과가 오류인지 아닌지 내 원하는!

어떤 제안?

수락 된 답변

우선, doc.DocumentNode.OuterHtml 의 값을 로컬 .html 파일에 저장하고 얻은 코드가 해당 코드인지 확인하는 것이 좋습니다. 문제는 HtmlAgilityPack을 사용하여 웹 사이트를 파싱하기 시작하는 것이지만, 가장 먼저 발생하는 문제는 올바른 HTML을 올바르게 가져 오지 못한다는 것입니다. 어쩌면 404 오류 또는 리디렉션 등이 발생했을 수 있습니다.

내가 //span[@class='swSprite s_star_3_5 '] 테스트하고 올바르게 작동했기 때문에 이것을 제안합니다.

그것은 다음과 같은 질문에서 문제가되었습니다.

그래도 도움이되지 않으면 HTML 코드를 게시하면 도와 드리겠습니다;)


인기 답변

이것은 나를 위해 작동합니다 :

HtmlDocument doc = new HtmlDocument();
doc.Load(myHtml);
HtmlNode node = doc.DocumentNode.SelectSingleNode("//span[starts-with(@class, 'swSprite')]");
Console.WriteLine("Text=" + node.InnerText.Trim());

출력

平均3.6 星

참고 XPATH starts-with 함수를 사용합니다 .



Related

아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow