Тяговая цена от Amazon RSS-корма, встроенного в описание - PullRequest
1 голос
/ 26 ноября 2010

Я работаю над каналом RSS, который извлекает данные из RSS-каналов Amazon. Я использую C # .NET Compact Framework 3.5. Я могу получить название книги, дату публикации и т. Д. Из узлов в ленте RSS. Однако цена книги встраивается в целую кучу HTML в узле описания. Как мне извлечь только цену, а не загрузку HTML?

if (nodeChannel.ChildNodes[i].Name == "item")
{
    nodeItem = nodeChannel.ChildNodes[i];
    row = new ListViewItem();
    row.Text = nodeItem["title"].InnerText;
    row.SubItems.Add(nodeItem["description"].InnerText);
    listBooks.Items.Add(row);
}

Пример цены в середине узла описания

<description><![CDATA[    <div class="hreview" style="clear:both;">  <div class="item">        <div style="float:left;" class="tgRssImage"><a class="url" href="https://rads.stackoverflow.com/amzn/click/com/B0013FDM7E" rel="nofollow noreferrer"><img src="http://ecx.images-amazon.com/images/I/51MvRlzFlpL._SL160_SS160_.jpg" width="160" alt="I Am Legend (Widescreen Single-Disc Edition)" class="photo" height="160" border="0" /></a></div>    <span class="tgRssTitle fn summary">I Am Legend (Widescreen Single-Disc Edition) (<span class="tgRssBinding">DVD</span>)<br />By <span class="tgRssAuthor">Will Smith</span><br /></span>  </div>  <div class="description">    <br />    <span style="display: block;" class="tgRssPriceBlock"><span class="tgProductPriceLine"><a href="https://rads.stackoverflow.com/amzn/click/com/B0013FDM7E" rel="nofollow noreferrer">Buy new</a>: <span class="tgProductPrice">$5.49</span></span><br /><span class="tgProductUsedPrice"><a href="http://www.amazon.com/gp/offer-listing/B0013FDM7E/ref=tag_rso_rs_eofr_used" id="tag_rso_rs_eofr_used">285 used and new</a> from <span class="tgProductPrice">$1.00</span></span><br /></span>    <span class="tgRssReviews">Customer Rating: <img src="http://g-ecx.images-amazon.com/images/G/01/x-locale/common/customer-reviews/stars-3-5._V192240731_.gif" width="64" alt="3.6" align="absbottom" height="12" border="0" /><br /></span>    <br />    <span class="tgRssProductTag"></span>    <span class="tgRssAllTags">Customer tags: <a href="http://www.amazon.com/tag/science%20fiction/ref=tag_rss_rs_itdp_item_at">science fiction</a>(92), <a href="http://www.amazon.com/tag/will%20smith/ref=tag_rss_rs_itdp_item_at">will smith</a>(79), <a href="http://www.amazon.com/tag/horror/ref=tag_rss_rs_itdp_item_at">horror</a>(51), <a href="http://www.amazon.com/tag/action/ref=tag_rss_rs_itdp_item_at">action</a>(43), <a href="http://www.amazon.com/tag/adventure/ref=tag_rss_rs_itdp_item_at">adventure</a>(34), <a href="http://www.amazon.com/tag/fantasy/ref=tag_rss_rs_itdp_item_at">fantasy</a>(33), <a href="http://www.amazon.com/tag/dvd/ref=tag_rss_rs_itdp_item_at">dvd</a>(30), <a href="http://www.amazon.com/tag/movie/ref=tag_rss_rs_itdp_item_at">movie</a>(20), <a href="http://www.amazon.com/tag/zombies/ref=tag_rss_rs_itdp_item_at">zombies</a>(14), <a href="http://www.amazon.com/tag/i%20am%20legend/ref=tag_rss_rs_itdp_item_at">i am legend</a>(6), <a href="http://www.amazon.com/tag/bad%20sci-fi/ref=tag_rss_rs_itdp_item_at">bad sci-fi</a>(4), <a href="http://www.amazon.com/tag/mutants/ref=tag_rss_rs_itdp_item_at">mutants</a>(4)<br /></span>  </div></div>]]></description>

$ 5.49 где-то в этом беспорядке

Ответы [ 3 ]

1 голос
/ 26 ноября 2010

Это описание выглядит очень плохо, и если у вас нет возможности получить другую версию этого RSS-канала, я думаю, что единственное решение - это проанализировать HTML-код, который у вас есть в описании.

Для этого вы можете использовать HTML Agility Pack (не использовал его, но это рекомендуемое решение для разбора HTML из .NET) или использовать регулярное выражение или текстовый поиск, чтобы найти этот тег и извлекать цену (мне это кажется немного хакерским и может привести к необходимости внесения многих изменений в случае изменения RSS)

Редактировать: Я выполнял поиск по строкам в сочетании с регулярным выражением некоторое время назад, и это было ужасно, но с учетом вашего случая и того, что это только для одного значения, это может быть хорошо.

1 голос
/ 26 ноября 2010

Это может быть глупая идея, но как насчет поиска строки после class="tgProductPrice">?затем извлекайте следующий символ, пока не нажмете конечный тег </span>.

Вам не нужно загружать html, у вас есть его в описании.

Будет ли это работать для вас?

0 голосов
/ 12 марта 2017
using CsQuery; //get CsQuery from nuget packages
path = textBox1.Text;
        var dom = CQ.CreateFromUrl(path);
        var divContent = dom.Select("#priceblock_ourprice").Text();
        //priceblock_ourprice is an id of span where price is written
        label1.Text = divContent.ToString();
...