プロが教えるわが家の防犯対策術!

こんばんは。
Ruby初心者ですが、現在、Selenium Webdriver、chromeにはまり、スクレイピングのような事をしています。

そんな中で困っている事があるのですが、

とあるサイトの画像URLを取得、テキストに追記で書き出ししようと色々と調べたのですが全く分からず困っています。


<div class="hoge">
<img src="http://hoge" alt=""></div>

htmlはこんなようでxpathは/hoge/imgと仮定します。


open("hoge.txt", "a"){|f|

output = driver.find_element(:xpath, '/hoge/img')

f.puts "#{output.text}"

}


のように書いてみたもののテキストに改行しか出力されない状態です。

何卒どうかご教授、よろしくお願いします。

A 回答 (2件)

Nokogiri なら、



#!/usr/bin/ruby
# coding: utf-8
require 'open-uri'
require 'nokogiri'
url = 'http://oshiete.goo.ne.jp/'
doc = Nokogiri.parse open(url).read
doc.search('img/@src').each do |src|
puts src.text
end

出力:
http://u.xgoo.jp/cmm001/img/sn/sn_50_w.gif
http://u.xgoo.jp/cmm001/img/logo/goo.gif
/images/common/new.gif
...
http://oshiete.xgoo.jp/images/common/powered_by_ …
http://cmm001.goo.ne.jp/cmm/img/wui/info_ed002/1 …
http://log000.goo.ne.jp/VL/Trace?c=151&tp=1&nosc …

が得られます。
教えて! goo のトップページの img 要素の src 属性を列挙します。
XPath の指定で、'img/@src' と、属性を指定することがポイントです。
    • good
    • 0
この回答へのお礼

ありがとうございます。

img/@srcの指定は驚きです。

そのままだと余分なimgのリンクを取得してしまうので
色々と駆使して下記のようにして希望の動作を行う事が出来ました。


require 'selenium-webdriver'
driver = Selenium::WebDriver.for :chrome


driver.navigate.to "http://hoge.com"

html = driver.page_source
doc = Nokogiri::HTML(html)


open("C:/Users/hoge/Desktop/hoge.txt", "a"){|f|

hoge = doc.xpath('/html/body/hoge[1]')
hoge.search('img/@src').each do |src|
f.puts src.text
end

}


本当にありがとうございました。

お礼日時:2014/08/11 14:33

div[contains(' hoge ', concat(' ', @class, ' '))]/img


簡便には、
div[@class='hoge']/img
を、XPath に指定するとどうでしょうか。

この回答への補足

ありがとうございます。

output = driver.find_element(:xpath,"//div[@class='hoge']/img" )


というような形でやってみたものの改行しか入力されません。
xpathの間違えではなさそうです。
nokogiriを使ってみましたが上手くいきません。

補足日時:2014/08/10 10:57
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!