HtmlAgilityPackは、クラス属性が動的に追加されたhtmlノードからテキストをどのように抽出しますか

html-agility-pack

質問

親愛なる友人、amazon.cnから抜粋したこのコードセグメントからテキストå¹³å ‡3.6 星 ~ å¹³å ‡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を使用してWebサイトの解析を開始することがあることですが、最初の問題は正しい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());

出力

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

注:私はXPATHのstarts-with関数を使用します




ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ