簡體   English   中英

Ruby Mechanize表抓取無法捕獲整行

[英]Ruby Mechanize table scraping doesn't capture entire row

我正在嘗試使用機械化方式刮擦桌子網站。 我要刮第二行。

當我跑步時:

agent.page.search('table.ea').search('tr')[-2].search('td').map{ |n| n.text }

我希望它能刮掉整行。 但是它只會抓取:[“ 2011-02-17”,“ 0,00”]

為什么不抓取該行中的所有列,而只抓取第一列和最后一列?

Xpath: / html / body / center / table / tbody / tr [2] / td [2] / table / tbody / tr [3] / td / table / tbody / tr [2] / td / table / tbody / tr [2]

CSS PATH: html主體中心表tbody tr td表tbody tr td表tbody tr td table.ea tbody tr td.total

該頁面與此類似:

<table><table><table>
<table width="100%" border="0" cellpadding="0" cellspacing="1" class="ea">
<tr>
    <th><a href="#">Date</a></th>
    <th><a href="#">One</a></th>    
    <th><a href="#">Two</a></th>    
    <th><a href="#">Three</a></th>     
    <th><a href="#">Four</a></th>    
    <th><a href="#">Five</a></th>        
    <th><a href="#">Six</a></th>        
    <th><a href="#">Seven</a></th>      
    <th><a href="#">Eight</a></th>
</tr>
<tr>
    <td><a href="#">2011-02-17</a></td>
    <td align="right">0</td>    
    <td align="right">0</td>    
    <td align="right">0,00</td>     
    <td align="right">0</td>    
    <td align="right">0</td>        
    <td align="right">0</td>    
    <td align="right">0</td>        
    <td align="right">387</td>      
    <td align="right">0,00</td>     <!-- FOV -->
    <td align="right">0,00</td>
</tr>
<tr>
    <td class="total">Ialt</td>
    <td class="total" align="right">0</td>  
    <td class="total" align="right">40</td>     
    <td class="total" align="right">0,46</td>   
    <td class="total" align="right">2</td>      
    <td class="total" align="right">0</td>        
    <td class="total" align="right">0</td>      
    <td class="total" align="right">0</td>        
    <td class="total" align="right">3.060</td>      
    <td class="total" align="right">0,00</td>       
    <td class="total" align="right">18,58</td>
</tr>
</table>
</table></table></table>

使用以下Ruby代碼( https://gist.github.com/835603 ):

require 'mechanize'
require 'pp'

a = Mechanize.new { |agent|
  agent.user_agent_alias = 'Mac Safari'
}

a.get('http://binarymuse.net/table.html') do |page|
  pp page.search('table.ea').search('tr')[-2].search('td').map{ |n| n.text }
end

我得到以下輸出:

["2011-02-17", "0", "0", "0,00", "0", "0", "0", "0", "387", "0,00", "0,00"]

我建議您將Mechanize留給比抓取頁面困難的東西。 您可以使用Nokogiri比使用Mechanize簡單得多(但是當然可以使用Mechanize來完成),因為您可以查詢頁面。

試試看!

是有關nokogiri的答案的鏈接

就我個人而言,當我需要發送諸如此類的表格和東西時,我使用了Mechanize, 盡管它還有很多其他用途!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM