屏幕抓取网页,使用Mechanize显示数据页面

MOZ*_*LLA 0 ruby paging screen-scraping mechanize

我正在尝试屏幕抓取一个网页(使用Mechanize),它在网格页面中显示记录.我能够读取第一页中显示的值,但现在需要导航到下一页以读取适当的值.

<tr>
    <td><span>1</span></td>
    <td><a href="javascript:__doPostBack('gvw_offices','Page$2')">2</a></td>
    <td><a href="javascript:__doPostBack('gvw_offices','Page$3')" >3</a></td>
    <td><a href="javascript:__doPostBack('gvw_offices','Page$4')" >4</a></td>
    <td><a href="javascript:__doPostBack('gvw_offices','Page$5')" >5</a></td>
    <td><a href="javascript:__doPostBack('gvw_offices','Page$6')">6</a></td>
    <td><a href="javascript:__doPostBack('gvw_offices','Page$7')" >7</a></td>
    <td><a href="javascript:__doPostBack('gvw_offices','Page$8')">8</a></td>
    <td><a href="javascript:__doPostBack('gvw_offices','Page$9')" >9</a></td>
    <td><a href="javascript:__doPostBack('gvw_offices','Page$10')" >10</a></td>
    <td><a href="javascript:__doPostBack('gvw_offices','Page$11')">...</a></td>
</tr>
Run Code Online (Sandbox Code Playgroud)

我能够通过所有链接,但当我尝试这个: -

links = (row/"a")
links.each do |link|
    agent.click link.attributes['href']   # This fails 
    agent.click link   # This also fails
end
Run Code Online (Sandbox Code Playgroud)

原因是agent.click期望URL作为参数.

有没有一种方法可以在页面显示时读取所有值?如果不是,当href是回发而不是URL时,我们怎么能有这样的点击动作?

Gae*_*bar 5

Mechanize无法处理javascript,所以基本上你有两个选择:

  • 使用scrubyt和firewatir:这是一种脚本浏览器的方式(因此Firefox处理javascript部分)
  • 手动检查基本URL并动态添加页码

就像是:

base_url = 'http://example.com/gvw_offcies&page='
links.each do |link|
  page_number = ... #get the page number from link
  agent.get base_url+page_number
end
Run Code Online (Sandbox Code Playgroud)