2009-12-10 73 views

回答

8

下面是一個完整的解決方案:

require 'open-uri' 
if open('http://example.com/').read =~ /searchword/ 
    # do something 
end 
1

您還可以使用機械化的寶石,類似這樣的東西。

require 'rubygems' 
require 'mechanize' 

mech = WWW::Mechanize.new.get('http://example.com') do |page| 

     if page.body =~ /mysearchregex/ 

       puts "found it" 
     end 
end 
3

我建議使用Nokogirihpricot來打開和解析HTML文檔。如果你需要一些簡單的,不需要解析HTML的東西,你可以使用內置於大多數ruby發行版的open-uri庫。如果需要更復雜的發佈表單(或登錄),您可以選擇使用機械化。

引入nokogiri可能是首選的解決方案後_why,但都是關於像這樣簡單:

require 'nokogiri' 
require 'open-uri' 
doc = Nokogiri(open("http://www.example.com")) 
if doc.inner_text.match(/someword/) 
    puts "got it" 
end 

雙方還允許您使用搜索類似XPath查詢或CSS選擇器,它允許你搶項目例如,在class = foo的所有div中。

幸運的是,在open-uri,nokogiri和機械化之間移動並不是什麼大不了的,所以請使用第一個滿足您需求的代碼,並在您意識到需要其他代碼的功能後修改代碼庫。

6

對於這樣簡單的事情,我寧願寫幾行代碼,而不是使用完整的寶石。這裏是我會做什麼:

require 'net/http' 

# let's take the url of this page 
uri = 'http://stackoverflow.com/questions/1878891/how-to-load-a-web-page-and-search-for-a-word-in-ruby' 

response = Net::HTTP.get_response(URI.parse(uri)) # => #<Net::HTTPOK 200 OK readbody=true> 

# match the word Ruby 
/Ruby/.match(response.body) # => #<MatchData "Ruby"> 

我可以去使用寶石,如果我需要做的比這更多,我需要實現某種算法爲它已經在的一個完成的路徑寶石

+1

對此問題的答案不是無效的,但您可能需要閱讀以下內容:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – 2009-12-13 22:10:03

+0

這很有用,謝謝 – nas 2009-12-14 07:27:17