1

Google 画像 Web ページ上のすべての画像ファイルの配列を作成しようとしています。

"imagurl="次の HTML に示すように、正規表現を使用して、後と前にすべてをプルする必要があり"&amp"ます。

<a href="http://www.google.com/imgres?imgurl=http://www.trendytree.com/old-world-   christmas/images/20031chapel20031-silent-night-chapel.jpg&amp;imgrefurl=http://www.trendytree.com/old-world-christmas/silent-night-chapel-20031-christmas-ornament-old-world-christmas.html&amp;usg=__YJdf3xc4ydSfLQa9tYnAzavKHYQ=&amp;h=400&amp;w=400&amp;sz=58&amp;hl=en&amp;start=19&amp;zoom=1&amp;tbnid=ajDcsGGs0tgE9M:&amp;tbnh=124&amp;tbnw=124&amp;ei=qagfUbXmHKfv0QHI3oG4CQ&amp;itbs=1&amp;sa=X&amp;ved=0CE4QrQMwEg"><img height="124" width="124" src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRLy5inpSdHxWuE7z3QSZw35JwN3upbBaLr11LR25noTKbSMn9-qrySSg"></a><br><cite title="trendytree.com">trendytree.com</cite><br>Silent Night Chapel <b>20031</b><br>400 × 400 - 58k - jpg</td>

正規表現でこれを行うことができるように感じますが、解析されたドキュメントを正規表現を使用して検索する方法が見つかりませんが、解決策が見つかりません。

4

3 に答える 3

2

正規表現を使用する際の問題は、URL 内のパラメーターの順序に関する知識が多すぎることです。順序が変更されたり&amp;消えたりすると、正規表現は機能しません。

代わりに、URL を解析してから、値を分割します。

# encoding: UTF-8

require 'nokogiri'
require 'cgi'
require 'uri'

doc = Nokogiri::HTML.parse('<a href="http://www.google.com/imgres?imgurl=http://www.trendytree.com/old-world-christmas/images/20031chapel20031-silent-night-chapel.jpg&amp;imgrefurl=http://www.trendytree.com/old-world-christmas/silent-night-chapel-20031-christmas-ornament-old-world-christmas.html&amp;usg=__YJdf3xc4ydSfLQa9tYnAzavKHYQ=&amp;h=400&amp;w=400&amp;sz=58&amp;hl=en&amp;start=19&amp;zoom=1&amp;tbnid=ajDcsGGs0tgE9M:&amp;tbnh=124&amp;tbnw=124&amp;ei=qagfUbXmHKfv0QHI3oG4CQ&amp;itbs=1&amp;sa=X&amp;ved=0CE4QrQMwEg"><img height="124" width="124" src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRLy5inpSdHxWuE7z3QSZw35JwN3upbBaLr11LR25noTKbSMn9-qrySSg"></a><br><cite title="trendytree.com">trendytree.com</cite><br>Silent Night Chapel <b>20031</b><br>400 × 400 - 58k - jpg</td>')

img_url = doc.search('a').each do |a|
  query_params = CGI::parse(URI(a['href']).query) 
  puts query_params['imgurl']
end

どの出力:

http://www.trendytree.com/old-world-christmas/images/20031chapel20031-silent-night-chapel.jpg

decode_www_formクエリをデコードしようとすると URI が例外を発生させるため、URI と CGI の両方が使用されます。

次のようなものを使用して、クエリ文字列をハッシュにデコードすることも知られています。

Hash[URI(a['href']).query.split('&').map{ |p| p.split('=') }]

それは戻ります:

{"imgurl"=>
  "http://www.trendytree.com/old-world-christmas/images/20031chapel20031-silent-night-chapel.jpg",
 "imgreurl"=>
  "http://www.trendytree.com/old-world-christmas/silent-night-chapel-20031-christmas-ornament-old-world-christmas.html",
 "usg"=>"__YJdf3xc4ydSfLQa9tYnAzavKHYQ",
 "h"=>"400",
 "w"=>"400",
 "sz"=>"58",
 "hl"=>"en",
 "開始"=>"19",
 "ズーム"=>"1",
 "tbnid"=>"ajDcsGGs0tgE9M:",
 "tbnh"=>"124",
 "tbnw"=>"124",
 "ei"=>"qagfUbXmHKfv0QHI3oG4CQ",
 "itbs"=>"1",
 "さ"=>"X",
 "ved"=>"0CE4QrQMwEg"}
于 2013-02-17T03:50:21.053 に答える
2
str = '<a href="http://www.google.com/imgres?imgurl=http://www.trendytree.com/old-world-     christmas/images/20031chapel20031-silent-night-chapel.jpg&amp;imgrefurl=http://www.trendytree.com/old-world-christmas/silent-night-chapel-20031-christmas-ornament-old-world-christmas.html&amp;usg=__YJdf3xc4ydSfLQa9tYnAzavKHYQ=&amp;h=400&amp;w=400&amp;sz=58&amp;hl=en&amp;start=19&amp;zoom=1&amp;tbnid=ajDcsGGs0tgE9M:&amp;tbnh=124&amp;tbnw=124&amp;ei=qagfUbXmHKfv0QHI3oG4CQ&amp;itbs=1&amp;sa=X&amp;ved=0CE4QrQMwEg"><img height="124" width="124" src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRLy5inpSdHxWuE7z3QSZw35JwN3upbBaLr11LR25noTKbSMn9-qrySSg"></a><br><cite title="trendytree.com">trendytree.com</cite><br>Silent Night Chapel <b>20031</b><br>400 × 400 - 58k - jpg</td>'
str.split('imgurl=')[1].split('&amp')[0]
#=> "http://www.trendytree.com/old-world-     christmas/images/20031chapel20031-silent-night-chapel.jpg"

それはあなたが探しているものですか?

于 2013-02-16T16:24:50.813 に答える
1

必要なすべての img URL を取得するには

# get all links
url = 'some-google-images-url'
links = Nokogiri::HTML( open(url) ).css('a')

# get regex match or nil on desired img
img_urls = links.map {|a| a['href'][/imgurl=(.*?)&/, 1] }

# get rid of nils
img_urls.compact

必要な正規表現は、 と/imgurl=(.*?)&/の間の貪欲でない一致が必要なためです。そうしないimgurl=と、貪欲は文字列の最後まですべてを取得します。&.*&

于 2013-02-16T16:43:11.610 に答える