2014-12-07 38 views
0

我使用Ruby和Nokogiri將內容保存在由其CSS選擇器定位的某些標記中。動態清理目標CSS選擇器

但是,我遇到了一個問題,即目標標籤在CSS ID名稱末尾附加了唯一的產品ID。

例子:

a#exampleIdNameB000AQ40M8B00JYWUHO4 

在我的劇本,我想這刮信息爲多種產品,所以這個ID會在每次改變,並打破了刮。

具體來說,我越來越喜歡這樣的標籤中的內容:

remove_html_tags(doc.css(html).to_s.strip) 

在HTML將它正在搜索的a#exampleIdName

有沒有辦法告訴引入nokogiri處理文檔一樣找到a#exampleIdNameB000AQ40M8B00JYWUHO4

a#examplIdName 

,所以我可以匹配所有的產品頁面?

+1

您需要爲您的輸入提供一個小的HTML樣本,並且輸出格式的例子,你需要,以及你正在使用的代碼的一個合理的例子。做你想做的事並不難,但是浪費我們不得不提出輸入數據的時間,我們可以利用時間來幫助別人。 – 2014-12-07 19:10:32

回答

0

解決此問題的正確方法是使用類而不是ID。如果這些元素沒有共同的類,那麼可以使用正則表達式在通過nokogiri解析它們之前去除ID屬性中不需要的部分。

使用Regex在您的文檔中用a#examplIdName代替a#exampleIdNameB000AQ40M8B00JYWUHO4

+0

如果HTML沒有類,該怎麼辦?顯示如何預處理文件的示例代碼。 – 2014-12-07 19:14:07

1

我不知道如果我理解正確的問題,但可以通過屬性前綴搜索:

require "nokogiri" 

html = "<div id=foo123>A</div> <div id=foo456>B</div> <div id=bar123>C</div>" 
doc = Nokogiri::HTML(html) 
p doc.css("div[id^=foo]").map(&:text) # ["A", "B"] 
+0

我會使用前綴方法來搜索ID。它會一直在文件中找到當前的文件。 – 2014-12-07 19:12:53