2016-10-12 36 views
-2
下面

見層次:遇到問題解析中的Watir-webdriver的這些數據

enter image description here

所有我需要的這裏是「公司名稱」,「公司老闆」,「公司老闆標題」,「街道號碼街道名稱「和」城市,州郵政編碼「。

我試過b.div.span.bs,但那不起作用(bs,因爲我收集數據的塊有多個)。我也認爲我只是嘗試像b.tds.split('<br>')之類的東西,然後替換標籤的所有實例並以某種方式刪除空的數組單元格,但是我發現每個塊都不相同,因此數據不會對齊,即公司標題可能位於單元格中1爲第一個數組,但如果公司標題不存在(對於第二個塊),那麼單元格1將是公司所有者,這是衝突...無論如何,只是試圖找到一個聰明的方式來獲取這些數據。謝謝。

Here是實際的HTML;但是您必須先點擊「查看全部」。

+1

我認爲答案將取決於數據如何變化。你能展示塊的不同變化嗎?您提到公司標題可能不存在,但很難說明HTML佈局的確切含義。哪些其他字段可能是可選的? (如果你可以粘貼HTML而不是截圖,這也會有所幫助 - 這使得我們更容易複製和驗證解決方案。) –

+0

@JustinKo,讓我檢查一下。 – Forwarding

+0

你能給我們一個鏈接的網頁之一?這對於幫助我們提出一個能夠始終如一地工作的解決方案來說非常有幫助。 – JeffC

回答

1

您可以拆分出<div>中的所有內容,然後將其拆分爲<br>。第一部分是公司標題(如果存在),然後公司所有者是最後/秒。

其餘的更棘手。有些傳真和會員很直接,因爲有標籤,所以這些很容易。 <a>很容易。

你或許可以用正則表達式測試電話號碼,然後從那裏備份。如果電話號碼前的那個不是<a>,那麼它是城市,州的郵政編碼,並且之前的是地址。如果在此之前存在,則是公司所有人的標題。

在您的示例中的電話號碼後的所有內容都有標籤,因此這些都很容易。

1

我不知道所有的用例,但往往是網頁,其中DOM是不是非常有幫助我剛剛得到的文本,使用Ruby解析:

browser.td.text.split("\n").reject(&:empty?) 
+0

這是一種有用的... – Forwarding

1

這並不直接回答的問題,但它表明我怎麼會去這樣做使用引入nokogiri,這是Ruby標準的HTML/XML解析器:

require 'nokogiri' 

doc = Nokogiri::HTML('<td><div></div><br>a<br>b<br>c</td>') 

doc是文檔的引入nokogiri的內部表示。

我們在標記中使用地標來導航並找到我們想要的東西。在這種情況下<div>是一個很好的起點:

doc.at('div').next_sibling.next_sibling.text # => "a" 

next_sibling是我們如何告訴引入nokogiri看看下一個節點。在這種情況下,它正在跨越第一個<br>並查看a TextNode。

那會導致不可行碼的,所以有一個更好的方式去:這表明我們可以找到所有的<td><br>標籤

doc.search('td br').to_html # => "<br><br><br>" 

,所以我們只需要在它們之間迭代和使用它們作爲我們的地標:

doc.search('td br').map{ |br| br.next_sibling.text } # => ["a", "b", "c"] 
+0

安裝時收到錯誤:'錯誤:執行寶石時...(Errno :: EPERM) 不允許操作 -/usr/bin/nokogiri' – Forwarding

+0

這就是我跑的:'sudo gem install nokogiri' – Forwarding

+1

我不太瞭解你的系統,以便根據這些信息提供幫助。另外,這將是一個單獨的問題。安裝Nokogiri在網站上覆蓋得很好。 –