C#HTML Agility Pack/PHPシンプルドムパーサー

私は、HTMLアジリティパックを使用してC#に変換したい単純なDOMパーサーを使用してPHPで動作する文を持っています。

私は本当に苦労していて、仕事に近いものさえも得られていません。

ここで私が取り組んでいるHTMLは:www.amazon.com/gp/offer-listing/B002UYSHMM/

ここで私はC#に変換したいPHP DOM Parserコードです:

foreach($html->find('div.resultsset table tbody.result tr') as $article) 
{ 
   if($article->find('span.price', 0)) 
   {  
     //get retail  
      $item[$retail.$i++] = $article->find('span.price', 0)->plaintext;  
     //get soldby

      if($article->find('img', 0)->getAttribute('alt') <> '') 
      {
         $item[$soldby.$j++] = $article->find('ul.sellerInformation img', 0)->getAttribute('alt'); 
      }
      else 
      {
         $item[$soldby.$j++] = $article->find('ul.sellerInformation li a b', 0)->plaintext; 
      }

      $ret['SellerInfo'] = $item;
   }  
}

もし誰かが私が本当に感謝することができます!

ベストアンサー

私はHTMLAgilityPackでCSSセレクタを使用したことはありませんが、xpath(同様に動作しますが構文は異なります)を使用すると、次のように動作します。

HtmlWeb htmlWeb = new HtmlWeb();
HtmlDocument doc = htmlWeb.Load(url);
doc.DocumentNode.SelectSingleNode(@"id('content')/div/div[1]/");

それについては本当にそうです。
SelectSingleNode()を使用していないときは、LINQを使用してコレクションを処理できます。あなたの模範を取り、それを実践するには:

HtmlWeb htmlWeb = new HtmlWeb();
HtmlDocument doc = htmlWeb.Load(url);
var price = Decimal.Parse(doc.DocumentNode.SelectSingleNode(@"id('price')").InnerText);
// etc...

特定のDOM要素のXPathを取得するための助けが必要な場合は、 XPath
Checker
を実行すると、右クリックすることで任意のDOM要素のXPathをすぐに取得できます。
HTMLAgilityPackでの作業にとても便利でした。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です