2013-03-20 66 views
0

我試圖讓一個網站的頭條(越南):獲取網站標題與引入nokogiri

enter image description here

# encoding: utf-8 
require 'rubygems' 
require 'nokogiri' 
require 'open-uri' 

page = Nokogiri::HTML(open("http://vnexpress.net")) 
list = page.css("a[class='link-topnews']") 
puts list[0].text 

,但它給了錯誤:

undefined method `text' for nil:NilClass (NoMethodError) 

的奇怪的是,使用完全相同的代碼,有時它可以工作並給出正確的結果:

Triều Tiên dọa hành động với máy bay B-52 của Mỹ 

試圖拿到冠軍它給了同樣的錯誤,即使:

page = Nokogiri::HTML(open("http://vnexpress.net/")) 
list = page.css("title") 
puts list[0].text 

爲什麼會那樣做的?我做錯了什麼?

回答

1

看來,他們的服務器拒絕服務的內容,當你只使用nokogiri。我想,他們正在檢查一些標題。您可以添加頁眉或使用機械化寶石:

require 'mechanize' 

agent = Mechanize.new 
page = agent.get "http://vnexpress.net" 
page.search("a.link-topnews").first.text 

=>「潮田DOA禪師độngVOI可能海灣B-52 CUA我的」

+0

感謝,它的工作原理。你有什麼想法,他們爲什麼會這樣做?即只使用Nokogiri時拒絕提供內容? – Chin 2013-03-20 05:05:25

+3

也許他們這樣做是因爲他們不希望人們用機器人來抓取他們的網站?您最好閱讀他們的服務條款以使用他們的網站。違反這些規定可能會導致您被禁止,並可能採取法律行動。 – 2013-03-20 05:14:35

+0

@Yuriy,不錯,但嘗試'at'而不是'search()。first'' – pguardiario 2013-03-21 09:04:29