2016-05-25 35 views
1

初めてこれをよく質問しなかったようです。もう一度行く。野外ウェブ掻き出し問題

私はここにこのチュートリアルに従うことをしようとしている

http://railscasts.com/episodes/190-screen-scraping-with-nokogiri

私は現在もここにこのウェブサイトのリンクから価格をこすりしようとしている:私は達成したいよ何http://www.ticketmaster.co.uk/derren-brown-miracle-glasgow-04-07-2016/event/370050789149169E?artistid=1408737&majorcatid=10002&minorcatid=53&tpab=-1

は持っていることですこれらの3つのチケット(名前と価格は、できるだけ多くのチケット/価格についてうまくいけばうまくいきます)を使用して、それらをWebアプリケーションで使用してください。

私はあなたにその結果を示すことはできません、その愚かに大きなサイズですが、私はあなたが2番目のbyebug、Heres私のコードをヒットしないことを伝えることができます。

url = "http://www.ticketmaster.co.uk/derren-brown-miracle-glasgow-04-07-2016/event/370050789149169E?artistid=1408737&majorcatid=10002&minorcatid=53&tpab=-1" 
    doc = Nokogiri::HTML(open(url)) 
    byebug 
    doc.css(".item").each do |item| 
     title = item.at_css(".fru").text 
     byebug 
    end 

残念ながら、恐ろしいページサイズを表示するには、これを自分で試す必要があります。ハハ!

編集は、[OK]を念頭に置いて、私の画面をむき出しにすると、27インチで、テキストはHERESに私は最初の画像から得たものの画像を画面

を埋めます。これにさらに

huge image of response

私はここで、この画像は私が必要とするすべてであることを信じますか?ちょうどそれを得ること。ここ

what i might need!

おかげ サム

+1

画像も良いソースになる可能性があります。 –

+1

haはイメージを考えなかった! 1秒 –

+1

ねえ、私はあなたの問題の答えを追加しました。それはあなたを始めさせるのに十分です。それが助けられたら教えてください。幸せなコーディング! –

答えて

1

主な問題は価格ではJavaScriptなくitslefをhtmlの内側に書かれていることです。 NokogiriはXMLとHTMLのみを解析するため、素晴らしいREGEXの助けが必要です。完全なコードを読む前に、ここにヒントを隠すためのヒントをいくつか示します。

このコードを使用することにより<script>という名前のすべてのタグの最初に私の検索:

doc.xpath("//script[@type='text/javascript']/text()").each

これは、100個の以上のオブジェクトを返しますので、私は、私は名前と価格を見つけることができるそれらのどれで見つけるために必要な。そのため、私が読んだ必要がある特定のjavascriptには固有のテキストが含まれていることがわかりました。したがって、すべて> 100個のオブジェクトをループし、その一意の文字列が含まれているかどうかをテストしました。ここではあなたが理解するための画像です:

enter image description here

enter image description here

そして、私はそれらの個展に出せるを見つけたとき、私はちょうど価格と名を抽出する正規表現を使用。ここに作業コードがあります。ペーストをコピーして実行するだけです。

require 'rubygems' 
require 'nokogiri' 
require 'open-uri' 

def get_name_and_price 
    ticketmaster_url = "http://www.ticketmaster.co.uk/derren-brown-miracle-glasgow-04-07-2016/event/370050789149169E?artistid=1408737&majorcatid=10002&minorcatid=53&tpab=-1" 
    doc = Nokogiri::HTML(open(ticketmaster_url)) 
    event_name = nil 
    ticket_price = nil 
    doc.xpath("//script[@type='text/javascript']/text()").each do |text| 
    if text.content =~ /TM\.Tracking\.satellite/ 
     event_name = text.content[/"eventName":".*?"/].gsub!('"eventName":', '').gsub!('"', '') 
    elsif text.content =~ /more_options_on_polling/ 
     ticket_price = text.content[/"total_price":"\d+\.\d+"/].gsub!('"total_price":', '').gsub!('"', '').to_f 
    end 
    end 

    puts "Event name: " + event_name 
    puts "Ticket price: " + ticket_price.to_s 
end 

get_name_and_price 
+0

これはありがとう、それはたくさんの助けになるだろう、しかし、最大のチケットを返すだけです、このイベントのための3つのチケットがあります。理想的には、基本料金と料金を示すチケット名/タイプと価格でできます。 –

+0

。それはコーディングの美しさです。;)私はあなたにスターターポイントを与えました。正規表現を使用して、すべての価格を自分で検索することができます。ブラウザで、そのページを価格で開き、マウスの右ボタンをクリックして「ページソースを表示」を選択し、チケット価格を検索します(CTRL + F)。他のプログラマーがhtmlページにそれをどのようにエンコードしたかを理解しよう。知識には時間がかかります。ハッピーコーディング。 –

+0

私はうまくいかなかったのです。< –

関連する問題