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时,我们怎么能有这样的点击动作?
Mechanize无法处理javascript,所以基本上你有两个选择:
就像是:
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)