こんばんは。
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}"
}
のように書いてみたもののテキストに改行しか出力されない状態です。
何卒どうかご教授、よろしくお願いします。
No.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' と、属性を指定することがポイントです。
ありがとうございます。
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
}
本当にありがとうございました。
No.1
- 回答日時:
div[contains(' hoge ', concat(' ', @class, ' '))]/img
簡便には、
div[@class='hoge']/img
を、XPath に指定するとどうでしょうか。
この回答への補足
ありがとうございます。
output = driver.find_element(:xpath,"//div[@class='hoge']/img" )
というような形でやってみたものの改行しか入力されません。
xpathの間違えではなさそうです。
nokogiriを使ってみましたが上手くいきません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonでのカーソル移動がずれる 2 2023/07/30 08:51
- HTML・CSS CSSのホバーエフェクト 1 2023/06/19 06:53
- JavaScript Javascript初心者|jQueryの.val()で値を取得し複数の要素を連結させる方法知りたい 2 2022/06/02 12:06
- HTML・CSS flex の各子要素を横幅 100% にしたい 1 2022/09/22 21:25
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- その他(開発・運用・管理) フォルダの中にファルダを作成してファイルを格納するバッチコマンド 1 2022/06/30 11:39
- その他(開発・運用・管理) バッチファイルで特定のファイル・ディレクトリ以外を削除する方法について 4 2022/05/31 14:03
- JavaScript javascriptで文字分割は、 split() などメソッド不要??? 4 2023/02/06 22:50
- PHP タグの追加 1 2022/08/19 11:25
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ビーリアルのユーザー名を変え...
-
パソコンのスクリーンセーバー...
-
(再質問)エクセルのマクロボ...
-
英数字を含む文字列(0-9,A-Z)...
-
講義でわからないのですが以下...
-
文字コードのエラー
-
WinSCPで画像のように puttyを...
-
パイソンのクラスについて
-
教えてください
-
pythonエラー
-
Accessで文字列のバイト数読み込み
-
初心者プログラミング
-
VBScriptでExcel(2019)上のデー...
-
Ruby on railsをrails sで立ち...
-
C言語の入力した文字を反転させ...
-
エクセルvbaでチェックボックス...
-
プログラミング
-
WIN11にオフイスを複数入れるこ...
-
VBA
-
パイソンエラーについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「arg」は何の略?
-
Ruby Selenium 要素の待機
-
VBA/GetTickCountの49.7日の境...
-
pythonのプログラミング
-
Rubyでクラスファイルをディレ...
-
例外の再スロー時に、その原因...
-
get() と find() の違いについて
-
パイソンのクラス
-
No route matches [GET] "/post...
-
A1の値をファイル名に指定した...
-
エクセルVBA オートフィルタで...
-
Rubyについて質問です
-
エラー「メソッドまたはデータ...
-
VBAで型が一致しないエラー(バ...
-
教えてください。vb5.0
-
Csvファイルの最終行を取得する...
-
クラス名やモジュール名の競合...
-
HSTLやSSTL等のI/Oピン
-
10円未満を切り捨てる方法は?
-
What class are you in? には何...
おすすめ情報