2014-01-16 123 views
0

我試圖從谷歌的主頁使用Nokogiri自動更正拼寫。爲什麼它在包含內容時返回空數組?

例如,如果我輸入「hw did」,正確的拼寫是「怎麼做」,我必須得到正確的拼寫。

我嘗試了xpathcss方法,但在這兩種情況下,我都得到了相同的空數組。

我得到了使用FireBug的XPath和CSS路徑。

這裏是我的引入nokogiri代碼:

@requ=params[:search] 
@[email protected](" ","+") //to encode the url(if user inputs space than it should be convet into +) 
@doc=Nokogiri::HTML(open("https://www.google.co.in/search?q=#{@requ_url}")) 

binding.pry 

這裏是我的XPath和CSS選擇器:

使用XPath:

pry(#<SearchController>)> @doc.xpath("/html/body/div[5]/div[2]/div[6]/div/div[4]/div/div/div[2]/div/p/a").inspect 
=> "[]" 

使用CSS:

pry(#<SearchController>)> @doc.css('html body#gsr.srp div#main div#cnt.mdm div.mw div#rcnt div.col div#center_col div#taw div div.med p.ssp a.spell').inner_text() 
=> "" 
+0

您可能正在使用錯誤的xpath,螢火蟲可能已經修改了html嘗試下面的內容,但未經過測試,但是從Chrome開發人員工具中複製而成 '// * [@ id =「gsr」]/table/tbody/tr/td [2]/table/tbody/tr [1]/td/div/table/tbody/tr/td [1]/span'btw你不應該依賴谷歌這樣的事情或者你正在做的事情它可以在未通知您的情況下明天更改其設計 – bjhaid

+0

爲什麼您的示例中有'
'標籤?你添加了它們,還是從一些HTML源代碼複製? –

+0

@tin男人,不,我沒有任何br標籤在我的例子中,這裏只是爲了格式化我的問題在stackoverflow。 – NamingException

回答

0

第一,使用正確的工具來操作U. RL的;他們會爲你節省頭痛。

以下是我會找到合適的拼寫:

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

requ = 'hw did' 
uri = URI.parse('https://www.google.co.in/search') 
uri.query = URI.encode_www_form({'q' => requ}) 
doc = Nokogiri::HTML(open(uri.to_s)) 
doc.at('a.spell').text # => "how did" 

它正常工作與「怎麼」,用「bnglore」或任何一個字串檢查它,它提供了一個錯誤。我在之前的代碼中遇到了同樣的問題。它顯示未定義的方法'文字'

這並不難想象。他們正在改變HTML,所以你必須改變你的選擇器。 「檢查」建議的單詞「bangalore」,並查看它與之前路徑相關的位置。一旦你知道,很容易找到一種方法來訪問字:

doc.at('span.spell').next_element.text # => "bangalore" 

不要相信谷歌做的事情最簡單的方式,甚至是最好的辦法,或者是一致的。僅僅因爲他們用空格的方式返回HTML的一種方式,並不意味着他們會以同樣的方式爲單個詞做同樣的事情。 I會一直這樣做,但他們可能會試圖阻止你挖掘他們的頁面,所以如果你看到變化,不要感到驚訝。

現在,您需要弄清楚如何編寫知道何時使用一個選擇器/方法或其他的代碼。這是你要做的。

+0

它工作正常,「如何做」,檢查它與「bnglore」或任何一個單詞字符串,它會給出錯誤。 與我之前的代碼中所面對的相同。 它顯示未定義的方法'文本' – NamingException

相關問題