2012-03-13 79 views
0

我對Ruby非常陌生,目前正在使用Nokogiri進行網站抓取練習。我想從隨機團購網站的「交易」中獲取詳細信息。我已經能夠成功地颳去一個網站,但我在解析輸出時遇到了問題。我嘗試了here中建議的解決方案,並使用正則表達式。到目前爲止,我失敗了。使用Nokogiri刮取字符串時刪除了一些空格

我試圖從this頁面解析以下標題/描述:

Frosty Frappes starting at P100 for P200 worth at Café Tavolo – up to 55% off 

這是我得到:

FrostyFrappes starting at P100 for P200 worth at Caf Tavolo up to 55% off 

下面是我的代碼片段:

require 'uri' 
require 'nokogiri' 

html = open(url) 
doc = Nokogiri::HTML(html.read) 
doc.encoding = "utf-8" 
title = doc.at_xpath('/html/body/div/div[9]/div[2]/div/div/div/h1/a') 
puts title.content.to_s.strip.gsub(/[^0-9a-z%&!\n\/(). ]/i, '') 

請告訴我,如果我錯過了一些東西。謝謝。

回答

2

你的xpath過於僵化,你的正則表達式正在刪除你想保留的字符。這是我會怎麼做:

title = doc.at('div#contentDealTitle h1 a').text.strip.gsub(/\s+/,' ') 

,上面寫着採取從第一個div#contentDealTitle和H1之後,是標籤的文本,剝光它(除去開頭和結尾的空格)和替換的1個或更多的所有序列空格字符與一個空格。

+0

非常感謝@pguardiario!我保留了我一直使用的原始xpath,並使用你的正則表達式改變了正則表達式。我用'/ \ s + [^ 0-9a-z]/i,''',它工作!看起來好像我在一開始就是如何構建它的。 – nmenego 2012-03-13 07:43:38

+0

不客氣。考慮改變你的xpath,以便小的佈局改變不會破壞你的腳本。另外我不確定爲什麼[^ 0-9a-z]是必要的,但考慮更簡單的\ W,它是任何非單詞字符的簡寫。 – pguardiario 2012-03-13 07:53:51

+0

非常感謝(再次)!我會記住所有這些。我只是使用Firefox的Firebug來提取xpath的(在Firebug檢查器中右鍵單擊,複製xpath)。有更聰明的方法嗎? – nmenego 2012-03-13 08:14:37