0

Railsスクリプトで特定のWebサイトURLからすべての背景画像を取得する必要があります

Nokogiriで試しました:

doc = Nokogiri::HTML(open(url)) // url - will be any website

Web サイトの HTML と CSS は次のとおりです。

<h1 class="logo">
  <a href="/">Website Name</a>
</h1>

.logo {
  width: 193px;
  height: 73px;
  float: left;
  background: url(/themes/site_themes/tccc/images/logo.png) no-repeat;
}

私が達成しようとしているのは、外部ファイルからロゴの背景画像の URL を取得することです。Nokogiri でインライン スタイルを取得できますが、外部スタイルの解決策を見つけることができませんでした。

任意の Webスクレーパーを使用して、提供された Web サイトからすべての背景画像を取得したいと考えています。

どうすればこれを達成できますか?

4

1 に答える 1

3

このようなことをして、その画像が属するタグ、クラス、またはIDの名前を持つ背景画像の配列を取得します。

document = Nokogiri::HTML(open(path_to_html_file)
background_images = search_in_css(document.css('style'))

スタイルを処理するプライベート メソッドを作成し、その画像へのタグ、名前または ID とパスを含む 2D 配列を返します。

private
  def search_in_css(styles)
    background_images = Array.new
    if styles.count > 0
      styles.each do |style|
        style.children.each do |prop|
          string = prop.to_s.delete("\n").delete("\t").delete(' ').gsub('"', "'")
          each_klass = string.split("}")
          each_klass.each do |el|
            arr = el.split("{")
            klass_name = "css_" + arr[0]
            image_url = arr[1][/background-image\:url\((.*?)\)\;/m, 1].delete("'")
            background_images << [ klass_name, image_url ]
          end
        end
      end
    end

    return background_images.uniq
  end

このメソッドは各行を処理し、取得した css の background-image プロパティのみを配置し、そのクラスの名前で配列に追加します。

于 2016-12-30T17:54:54.643 に答える