在Mechanize中使用带有CSS选择器的page.at

时间:2016-09-27 23:44:14

标签: ruby web-scraping mechanize mechanize-ruby

我正在尝试使用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选择器可以解决问题。

1 个答案:

答案 0 :(得分:0)

也许网站内容是通过JavaScript动态加载的。

检查page变量的内容,看看其中的内容是否完整。

如果内容不完整,则意味着必须向服务员返回该数据的其他一些请求。您可以搜索它们打开Chrome DevTools(或其他工具)。在“网络”标签中,您将看到网站发出的所有请求。搜索包含所需数据的那个,然后通过Mechanize抓取它。