2017-12-03 16 views
1

私はしばらくの間、.uniqメソッドを使用して、/ informaticsパス内のWebサイトからURLの一意のリストを生成しようとしています。何を試しても、リストを生成しようとするとメソッドエラーが発生します。私はそれが構文上の問題だと確信しています、そして、私は誰かが私を正しい方向に向けることを望んでいました。nokogiriを使ってすべての一意のURLを取得する

リストを取得したら、これらをActiveRecord経由でデータベースに保存する必要がありますが、その前に独自のリストを作成する前に固有のリストが必要です。

require 'nokogiri' 
require 'open-uri' 
require 'active_record' 

ARGV[0]="https://www.nku.edu/academics/informatics.html" 

ARGV.each do |arg| 
    open(arg) do |f| 
    # Display connection data 
    puts "#"*25 + "\nConnection: '#{arg}'\n" + "#"*25 
    [:base_uri, :meta, :status, :charset, :content_encoding, 
    :content_type, :last_modified].each do |method| 
     puts "#{method.to_s}: #{f.send(method)}" if f.respond_to? method 
    end 

    # Display the href links 
    base_url = /^(.*\.nku\.edu)\//.match(f.base_uri.to_s)[1] 
    puts "base_url: #{base_url}" 

    Nokogiri::HTML(f).css('a').each do |anchor| 
     href = anchor['href'] 
     # Make Unique 

     if href =~ /.*informatics/ 
     puts href 
     #store stuff to active record 
     end 
    end 
    end 
end 
+0

動作しますが、私はhttps://gist.github.com/vnhnhm/f6f8079c7180b6b7ffeb52d23b563c3eに加えて、省略したその他の初期のものを取得します。具体的な問題は何ですか? –

+0

私はコードが動作することを知っていますが、重複するURLがあります。私は重複がないことを確認する必要があります –

答えて

1

/*.informatics/と一致し、それはすでに配列だとして、あなたは、uniqのに使用することができますのみのhref属性を選択する鋸山:: HTMLの一部を置き換えます。

require 'nokogiri' 
require 'open-uri' 
require 'active_record' 

ARGV[0] = 'https://www.nku.edu/academics/informatics.html' 

ARGV.each do |arg| 
    open(arg) do |f| 
    puts "#{'#' * 25} \nConnection: '#{arg}'\n #{'#' * 25}" 

    %i[base_uri meta status charset content_encoding, content_type last_modified].each do |method| 
     puts "#{method.to_s}: #{f.send(method)}" if f.respond_to? method 
    end 

    puts "base_url: #{/^(.*\.nku\.edu)\//.match(f.base_uri.to_s)[1]}" 

    anchors = Nokogiri::HTML(f).css('a').select { |anchor| anchor['href'] =~ /.*informatics/ } 
    puts anchors.map { |anchor| anchor['href'] }.uniq 
    end 
end 

outputを参照してください。

+0

パーフェクト、助けを感謝します。私はこれに近いスーパーの束を書いたが、それを得ることができなかった。心から感謝する。 –

+1

URLを繰り返して印刷するだけだったので、すでに印刷されているかどうかを確認する方法が必要でした。 –

+0

あなたはcssでこれを行うことができます: 'a [href * = informatics]' – pguardiario

関連する問題