請問各位先進
最近我想要用編寫一個shell script 用來擷取機場航班資訊
如本頁面
http://www.tsa.gov.tw/CustomerSet/tsa/tp_FlightSchedule/u_fsin_v.asp?id={FE8E2C05-9D2C-482F-9919-4A3A3387E71A}&AirID=UIA&GoalName=KHH
再將文字流擷取特定欄位後導入網頁,而不是直接用連結
所以我是可以用wget 先擷取之後再用awk做處理?
不過用wget載下的是空白檔,是否遺漏參數
這部份還是新手所以想各位先進解答@@
要處理html的table,
用shell script的相關工具是太辛苦。
也可像zanhsieh建議用刮除HTML的工具,
來截取其中的內容;
這方面也可參閱站上的舊文:
[Reply]用ruby 來刮除不必要的HTML標籤
PHP正規劃過濾Excel轉html的table
以下是用 ruby 透過 hpricot 寫的簡單的 script 的測試過程,
先 wget 該網頁為 fly.html
然後寫一個parse.rb的指令檔:
<pre class="c" name="code">require 'rubygems'
require 'hpricot'
array = []
doc = Hpricot(open('fly.html'))
trs = doc.search('.C-tableA0/tr')
(2..trs.size-1).to_a.each do |i|
tdarr = []
trs[i].search('td').each do |td|
tdarr << td.innerText
end
array << tdarr
end
p array
最主要的是上面的第5行
就把所有各行的tr抓到,
第8行就把各td抓成陣列。
最後一行只是印出陣列。
然後執行 ruby parse.rb 即印出array的樣式。
將測試放在Rails上,
controller的內容稍有不同:
<pre class="c" name="code">def chenry
require 'rubygems'
require 'hpricot'
require 'open-uri'
@array = []
#doc = Hpricot(open('fly.html'))
url = 'http://www.tsa.gov.tw/CustomerSet/tsa/tp_FlightSchedule/u_fsin_v.asp?id={FE8E2C05-9D2C-482F-9919-4A3A3387E71A}'
uri = URI.parse(URI.encode(url.strip))
doc = Hpricot(open(uri))
trs = doc.search('.C-tableA0/tr')
(2..trs.size-1).to_a.each do |i|
tdarr = []
trs[i].search('td').each do |td|
tdarr << td.innerText
end
@array << tdarr
end
end
而 view 的chenry.html.erb的內容為:
<pre class="c" name="code"><ul>
<% @array.each do |a| -%>
<li><%= a.join('::') -%></li>
<% end -%>
</ul>
<hr />
<%= @array.inspect -%>
就畫成即時的這個 測試。
不同程式語言,
都應有類似的處理 HTML 或 DOM 的相關套件,
比單純用 shell script 工具省很多力。
chenry提到:
是否可以用wget 先擷取之後再用awk做處理?
當然可以。
chenry提到:
用wget載下的是空白檔,是否遺漏參數
沒有遺漏。因為我可以用 wget 抓到網頁。我寫的指令是:
<pre class="c" name="code">wget 'http://www.tsa.gov.tw/CustomerSet/tsa/tp_FlightSchedule/u_fsin_v.asp?id={FE8E2C05-9D2C-482F-9919-4A3A3387E71A}&AirID=UIA&GoalName=KHH'
請寫出你下的指令是什麼。