Как перебрать страницу с несколькими объектами - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь сделать скребок для рыночного сайта, который странным образом перечисляет их содержимое.Для каждого элемента в списке, я должен щелкнуть по нему, чтобы найти цену, и после того, как я щелкнул по нему и вернулся после анализа данных, порядок списка элементов мог измениться.

Нет особого способа ссылаться на каждую «ссылку» с помощью Watir, поэтому фактическое успешное упорядоченное расценение всех предметов мне не известно.

Я использую Watir для доступа к элементу rb browser.element(:text => 'ItemName').click.Это хорошо, если бы это был только один элемент, который я хотел проанализировать с помощью Nokogiri.

<div id="market" class="itemList active" style="height: 396px;" data-category="30">
    <div class="item" data-mainkey="4601" data-count="40503" data-grade="0">
        <div class="thumbImg" style="background-image: url(&quot;https://akamai-webcdn.kgstatic.net/TradeMarket/Common/item/4601.png&quot;)"></div>
        <div class="content"><p>Ash Timber</p><p class="gray"></p></div>
        <div class="count">40503</div>
    </div>
    <div class="item" data-mainkey="4602" data-count="266" data-grade="0">
    <div class="thumbImg" style="background-image: url(&quot;https://akamai-webcdn.kgstatic.net/TradeMarket/Common/item/4602.png&quot;)"></div>
    <div class="content"><p>Maple Timber</p><p class="gray"></p></div>
    <div class="count">266</div>
</div>

Так будет выглядеть список, за исключением нескольких сотен статей.

browser.element(:text => 'Materials').click
sleep 2
browser.element(:text => 'Wood').click
sleep 2
browser.element(:text => 'Ash Timber').click
sleep 2


page = Nokogiri::HTML(browser.html)
page.xpath('/html/body/div/div[1]/main/div[1]/div[2]/div[2]/p[1]').each do |nc|
  @name = (nc).text
  puts @name
end

Есть ли способ перебирать каждый элемент на основе их "data-mainkey"", поскольку это идентификатор элемента из того, что я видел.

В настоящее время это проект, и он выводит имя элемента просто отлично.

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

1 Ответ

0 голосов
/ 10 июля 2019

Я не уверен, правильно ли я понимаю поток страниц, но, похоже, вам нужно:

  • Сохранить все значения data_mainkey
  • Перебирайте каждое из значений основного ключа - каждый раз переставляя элемент

Код будет выглядеть так:

main_keys = browser.divs(class: 'item').map(&:data_mainkey)
main_keys.each do |key|
  # Depending how the page is written, the div(class: 'content') might not be necessary
  browser.div(data_mainkey: key).div(class: 'content').click

  # Get the price

  # Navigate back to the list page
end
...