C # HTML Agility Pack / PHP Простой Dom Parser - PullRequest
1 голос
/ 13 ноября 2011

У меня есть рабочий оператор в PHP с использованием простого dom-парсера, который я хочу преобразовать в C # с помощью пакета Agility HTML.

Я действительно изо всех сил и не смог получить что-либо даже близко к работе.

Вот HTML-код, над которым я работаю: www.amazon.com/gp/offer-listing/B002UYSHMM/

Вот мой код PHP DOM Parser, который я хочу преобразовать в C #:

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;
   }  
}

Если кто-нибудь может помочь, я буду очень признателен!

1 Ответ

1 голос
/ 13 ноября 2011

Я никогда не использовал селекторы CSS с HTMLAgilityPack, но используя xpath (который работает аналогично, но с другим синтаксисом), он работает так:

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

Это действительно так. Вы можете использовать LINQ для обработки коллекций, когда вы не используете SelectSingleNode (). Итак, чтобы взять ваш пример и применить его на практике:

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

Если вам нужна помощь в получении XPath определенного элемента dom, есть отличный плагин firefox с именем XPath Checker , который мгновенно получит вам XPath любого элемента dom, нажав правой кнопкой мыши. Мне было очень полезно работать с HTMLAgilityPack.

...