2016-09-27 3 views
1

Я пытаюсь скрести веб-страницы с Mechanize, со следующей структурой:Использование page.at с селектором CSS в Mechanize

<div id="searchResultsBox"> 
    <div class="listings-wrap"> 
     <div class="listings-header"> 
     <div class="listing-cat">Category</div> 
     <div class="listing-name">Name</div> 
     </div> 
     <ul class="listings"> 
     <li class="listing"> 
      <a href="/ShowRatings.jsp?tid=1143052"> 
      <span class="listing-cat"> 
       <span class="icon"></span> 
       TEXT 
       </span> 
      <span class="listing-name"> 
       <span class="main">TEXT</span> 
       <span class="sub">TEXT</span> 
      </span> 
      </a> 
     </li> 
     ... 

Я хочу, чтобы перейти на страницу позади <a> HTML элемента. Прямо сейчас, у меня есть:

agent = Mechanize.new 
page = agent.get("URL") 
page = page.at('#searchResultsBox > div.listings-wrap > ul > li:nth-child(1) > a') 

но постоянно возвращается NIL (уточнена puts page.class).

Я также попытался использовать sleep, чтобы попытаться обеспечить, чтобы страницы успевали загружаться, прежде чем продолжить.

Есть ли что-нибудь, что я делаю неправильно? Я думал, что использование селектора CSS сделает трюк.

+0

Как вы получили HTML? Если Mechanize не может найти этот тег либо селектор ошибочен, либо тег фактически не существует в мире Mechanize. Добавление 'sleep' не поможет, потому что Mechanize захватывает страницу, а затем ждет, когда вы скажете, какой элемент найти; Он не рекурсивно просматривает страницу и извлекает все, как браузер, что также означает, что если разделы страницы загружаются динамически, то Mechanize никогда их не увидит. Используйте 'nokogiri' в командной строке для загрузки страницы, затем используйте' @ doc.at ('# searchResultsBox> div.listings-wrap> ul> li: nth-child (1)> a') 'и посмотреть, работает. –

+0

попробуйте выполнить 'page.at ('div # searchResultsBox a')' –

ответ

0

Возможно, содержимое сайта загружается с помощью Javascript динамически.

Осмотрите содержимое своей переменной page и посмотрите, есть ли контент в комплекте или нет.

Если контент неполный, это означает, что должны быть какие-то другие запросы, чтобы serwer возвращал эти данные. Вы можете найти их, открыв Chrome DevTools (или другой инструмент). На вкладке «Сеть» вы увидите все запросы, сделанные веб-сайтом. Найдите тот, который содержит нужные вам данные, а затем очистите его с помощью Mechanize.

 Смежные вопросы

  • Нет связанных вопросов^_^