Этот вопрос занимает немного времени, чтобы представить, нести меня. Будет весело решать, если вы можете туда добраться. Этот фрагмент будет реплицирован на тысячи страниц на этом веб-сайте, используя цикл.
Я пытаюсь очистить веб-сайт http://www.digikey.com/product-detail/en/207314-1/A25077-ND/, чтобы посмотреть данные в таблице с помощью Digi-Key Part Number, Quantity Available и т.д... включая правую сторону с ценовым разрывом, Цена за штуку, Расширенная цена.
Использование функции R readHTMLTable() не работает и возвращает только значения NULL. Причина этого (я считаю) заключается в том, что веб-сайт скрыл ее содержимое, используя тег "aspNetHidden" в html-коде.
По этой причине я также обнаружил трудности с использованием htmlTreeParse() и xmlTreeParse() со всем сектором, родительским, не появляющимся в результатах.
Использование функции sc scrape() из пакета scrapeR
require(scrapeR)
URL<-scrape("http://www.digikey.com/product-detail/en/207314-1/A25077-ND/")
возвращает полный html-код, включая интересующие строки:
<th align="right">Digi-Key Part Number</th>
<td id="reportpartnumber">
<meta itemprop="productID" content="sku:A25077-ND">A25077-ND</td>
<th>Price Break</th>
<th>Unit Price</th>
<th>Extended Price
</th>
</tr>
<tr>
<td align="center">1</td>
<td align="right">2.75000</td>
<td align="right">2.75</td>
Тем не менее, я не смог выбрать узлы из этого блока кода с возвращаемой ошибкой:
no applicable method for 'xpathApply' applied to an object of class "list"
Я получил эту ошибку, используя различные функции, такие как:
xpathSApply(URL,'//*[@id="pricing"]/tbody/tr[2]')
getNodeSet(URL,"//html[@class='rd-product-details-page']")
Я не самый знакомый с xpath, но идентифицировал xpath, используя элемент проверки на веб-странице, и скопировал xpath.
Любая помощь, которую вы можете оказать на это, будет очень признательна!
Вы не читали справку о том, что у вас есть? Он возвращает список, вам нужно получить части этого списка (если parse = TRUE) и так далее.
Также я думаю, что на веб-странице происходит тяжелое обнаружение браузера. Если я попробую и wget
страницу из командной строки, я получаю страницу с ошибкой, функция scrape
получает что-то полезное (но похоже на вас), и Chrome получает полный мусор со всеми закодированными материалами. Тьфу. Вот что для меня работает:
> URL<-scrape("http://www.digikey.com/product-detail/en/207314-1/A25077-ND/")
> tables = xpathSApply(URL[[1]],'//table')
> tables[[2]]
<table class="product-details" border="1" cellspacing="1" cellpadding="2">
<tr class="product-details-top"/>
<tr class="product-details-bottom">
<td class="pricing-description" colspan="3" align="right">All prices are in US dollars.</td>
</tr>
<tr>
<th align="right">Digi-Key Part Number</th>
<td id="reportpartnumber"><meta itemprop="productID" content="sku:A25077-ND"/>A25077-ND</td>
<td class="catalog-pricing" rowspan="6" align="center" valign="top">
<table id="pricing" frame="void" rules="all" border="1" cellspacing="0" cellpadding="1">
<tr>
<th>Price Break</th>
<th>Unit Price</th>
<th>Extended Price
</th>
</tr>
<tr>
<td align="center">1</td>
<td align="right">2.75000</td>
<td align="right">2.75</td>
Настройтесь на свой прецедент, здесь я получаю все таблицы и показываю второй, у которого есть информация, которую вы хотите, некоторые из них в таблице pricing
которую вы можете получить напрямую:
pricing = xpathSApply(URL[[1]],'//table[@id="pricing"]')[[1]]
> pricing
<table id="pricing" frame="void" rules="all" border="1" cellspacing="0" cellpadding="1">
<tr>
<th>Price Break</th>
<th>Unit Price</th>
<th>Extended Price
</th>
</tr>
<tr>
<td align="center">1</td>
<td align="right">2.75000</td>
<td align="right">2.75</td>
</tr>
и так далее.
scrape
?