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