下記テーブルからデータ抽出したいのですが、解決できないのでお願いします。
したいことが。2点あります。
【HTMLの内容】
<table>
<tr class="list">
<td>リンク1 タイトルA</td>
<td>リンク2 値A</td>
</tr>
<tr class="list">
<td>リンク3 タイトルB</td>
<td>リンク4 値B</td>
</tr>
<tr class="list">
<td>リンク5 タイトルC</td>
<td>リンク6 値C</td>
</tr>
</table>
リンク7
リンク8
リンク9
リンク10
------------------
① 上記HTMLより、trタグclass="list"のリンクのみ配列データで取得したい
リンク1
リンク2
リンク3
リンク4
リンク5
リンク6
②
値A、B、C を配列データで取得したい
------------------
mechanize をつかってリンクは下記でできますが、その先がわかりません。。。。
require 'mechanize'
agent = Mechanize.new
url_ary = Array.new
site_top_url = "http://www.xxxx.com/"
page = agent.get(site_top_url)
page.search("/html/body/div[3]/div/table/tr")
page.links.each do |link|
puts link
end
以上宜しくお願いします。
<html> <body> <table> <tr class="list"> <td><a href="1">リンク1 タイトルA</a></td> <td><a href="2">リンク2 値A</a></td> </tr> <tr class="list"> <td><a href="3">リンク3 タイトルB</td> <td><a href="4">リンク4 値B</a></td> </tr> <tr class="list"> <td><a href="5">リンク5 タイトルC</a></td> <td><a href="6">リンク6 値C</a></td> </tr> </table> <a href="7">リンク7</a> <a href="8">リンク8</a> <a href="9">リンク9</a> <a href="10">リンク10</a> </body> </html>
require 'mechanize' agent = Mechanize.new site_top_url = "http~" page = agent.get(site_top_url) #① #htmlを取得 links = page.search('.list td a').map{|e| e.to_html} #「リンク1 タイトルA」のテキストを取得 #links = page.search('.list td a').map{|e| e.inner_text} #hrefだけ #links = page.search('.list td a').map{|e| e['href']} p links #② #質問と同じDOM構造なら以下のcssセレクタで values = page.search('.list td:last-child a').map{|e| e.text} #xpathなら values = page.search('//tr[@class="list"]/td[2]/a').map{|e| e.text} puts values
<html> <body> <table> <tr class="list"> <td><a href="1">リンク1 タイトルA</a></td> <td><a href="2">リンク2 値A</a></td> </tr> <tr class="list"> <td><a href="3">リンク3 タイトルB</td> <td><a href="4">リンク4 値B</a></td> </tr> <tr class="list"> <td><a href="5">リンク5 タイトルC</a></td> <td><a href="6">リンク6 値C</a></td> </tr> </table> <a href="7">リンク7</a> <a href="8">リンク8</a> <a href="9">リンク9</a> <a href="10">リンク10</a> </body> </html>
require 'mechanize' agent = Mechanize.new site_top_url = "http~" page = agent.get(site_top_url) #① #htmlを取得 links = page.search('.list td a').map{|e| e.to_html} #「リンク1 タイトルA」のテキストを取得 #links = page.search('.list td a').map{|e| e.inner_text} #hrefだけ #links = page.search('.list td a').map{|e| e['href']} p links #② #質問と同じDOM構造なら以下のcssセレクタで values = page.search('.list td:last-child a').map{|e| e.text} #xpathなら values = page.search('//tr[@class="list"]/td[2]/a').map{|e| e.text} puts values
①と②を追記しました。
page.search("/html/body/div[3]/div/table/tr")のようにxpathで尚且絶対パスで指定するのはサイト構造変化に弱く、また記述も面倒なので相対的なものにするようおすすめします。xpathで②を解くとしたら
values = page.search('//tr[@class="list"]/td[2]/a').map{|e| e.text} puts values
とか。
回答1はcssセレクタによるものです。
①と②を追記しました。
2012/09/14 07:16:10page.search("/html/body/div[3]/div/table/tr")のようにxpathで尚且絶対パスで指定するのはサイト構造変化に弱く、また記述も面倒なので相対的なものにするようおすすめします。xpathで②を解くとしたら
とか。
2012/09/14 07:24:00回答1はcssセレクタによるものです。