抓取網頁的腳本

一道企業shell編程實戰題 http://oldboy.blog.51cto.com/2561410/1657042

本腳本對http://edu.51cto.com/的視頻具有通用性,暫未發現bug,如有發現,請看官自行解決。j_0016.gif

先上腳本

[root@mysql scripts]# cat html_to_table.sh        
#!/bin/bash
# oldboy linux training
# 2015-06-01
# Happy Children's Day
# 說明:本腳本來自老男孩linux21期學員張耀開發!
EduFile=/tmp/edu.html
EduFile2=/tmp/edu2.html
Url="$*"

# Check for given parameters 
[ $# -eq 0 ] && {
   echo "USAGE: /bin/sh $0 http://...."
   exit 1
}

# Judge url is ok?
curl -I $Url &>/dev/null 
[ $? -ne 0 ] &&{
   echo "Bad url,Please check it"
   exit 1
}

# Defined get pagenum and CourseId Functions
function getnum(){
        curl -s $Url>$EduFile
        grep '"pagesGoEnd"' $EduFile &>/dev/null
        if [ $? -eq 0 ]
          then
            num=`sed -rn 's#.*page=([0-9].*)" class="pagesGoEnd".*$#\1#gp' $EduFile`
        else
            num=`sed -rn 's|.*page=([0-9].*)#" class="pagesNum".*$|\1|gp' $EduFile`
        fi
        pagenum=${num:-1}
        CourseId=`echo $Url|awk -F "[-.]" '{print $4}'`
}


# Defined curl html Functions
function Curl(){
        getnum
        for i in `seq $pagenum`
          do 
            curl "http://edu.51cto.com/index.php?do=course&m=lessions&course_id=$CourseId&page=$i" 1>>$EduFile 2>/dev/null
        done
}

# Defined Create table Functions
function table(){
        sum=""
        index=1
        sed -rn '/do=lesson/ s#<.*(<a href=")(.*)</h4>#\1http://edu.51cto.com\2#gp' $EduFile > $EduFile2
        while read line
          do
            sum=$sum"<tr><th width="40" scope="row">$index</th><td width="520">$line</td>"
            ((index++))
        done <$EduFile2
}

# Defined Create html Functions
function html(){
        cat >/tmp/oldboy.html<<-END
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>test</title>
        </head>

        <body>
        <table width="560" border="1">
        $sum
        </table>
        </body>
        </html>
        END
}

function main(){
        Curl
        table
        html
}

main


測試網頁http://edu.51cto.com/course/course_id-839.html

[root@mysql scripts]# sh html_to_table.sh http://edu.51cto.com/course/course_id-839.html 
[root@mysql scripts]# sz /tmp/oldboy.html

我將網頁文件的table部分粘貼上來



1合格運維素質及挖掘內心學習動力
2老男孩23期開班注意事項
3跟着老男孩可以學到什麼本領--老男孩核心教育思想
4學習運維到底該學習什麼-老男孩核心教育思想
5培養好的學習聽課思維習慣
6學好運維的思想轉變
7培養自己成爲素質人才
8如何才能學好linux運維重要思想-老男孩核心理念
9計算機及網站服務器硬件-機箱-電源介紹01
10計算機及網站服務器硬件-主板-CPU-內存-硬盤02
11硬件體系優化及IO優化核心優化原理詳解
12其他硬件信息簡單介紹
13計算機硬件重要知識點總結01
14計算機硬件重要知識點總結02
15課後作業及內容預習
16上節知識內容回顧
17操作系統介紹及作用講解
18什麼是linux及特點
19Unix的歷史介紹
20Unix的5大優秀特性
21Unix操作系統革命故事
22Linux的誕生介紹
23Linux的發展歷程介紹
24Linux發展過程中的重要必知人物
25自由軟件的概念介紹
26自由軟件基金會FSF介紹
27插入一段學習運維的重要思想
28GNU核心知識介紹
29GPL核心知識介紹
30Linux系統的組成
31Linux爲什麼受歡迎
32Linux的重要特點集合介紹
33Linux的三大企業應用領域介紹
34Linux的各類發行版及區別
35如何選擇Linux版本學習專家建議
36Centos的版本介紹及選擇建議
37搭建Linux學習環境的重要建議
38安裝及創建vmware虛擬機實戰
39vmware核心技術網卡三種模式之NAT介紹
40vmware核心技術網卡三種模式之bridged介紹
41vmware核心技術網卡三種模式之HOST-ONLY模式介紹
42實戰完成創建新的VM尋虛擬機
43Centos6.6安裝初步及安裝可能的故障講解
4432位和64位Linux的區別介紹
45開始實戰安裝Centos Linux系統
46Linux系統磁盤分區知識介紹
47Linux設備的命名及Linux基本分區方案
48Linux分區類型raid-lvm介紹及企業選擇建議
49linux分區重要知識介紹-掛載點-文件系統類型等
50Linux關鍵包選擇講解及安裝完成
51重啓引導及Linux內核版本號介紹
52IP地址介紹及爲Linux配置IP地址
53網卡設置的相關問題答疑
54SSH客戶端連接服務器故障問題分析與解決
55老男孩第一關命令考試vi-vim-cat-touch-echo命令講解
56老男孩第一關命令考試-重定向-追加重定向-標準輸入輸出知識實戰
57老男孩第一關命令考試-cat-cp命令企業應用實戰
58老男孩第一關命令考試-mv-ls-man-help等核心命令實戰講解
59課後作業與預習
60重要運維思想之觀察和總結案例
61重要運維思想之如何與高手愉快交往問問題
62重要運維思想之如何和別人請教問題細節
63抓住高手的心-讓他不回答你都難
64上節內容簡單複習回顧
65find命令企業及應用案例精講
66刪除目錄及特殊字符單雙點重點講解
6708-cat-grep-sed企業重點案例應用講解
68mkdir-yum-rpm-tree命令應用案例講解
69學好linux命令的重要學習思想
70tree-rpm命令使用深入
71別名的深度企業案例多種方法講解
72linux別名深層原理-作用-實戰講解
73特殊家目錄符號介紹
74結合企業面試引出seq命令深度講解
75tail命令企業應用及解決實際面試題案例
76sed企業級面試應用案例講解-打印行號
77awk命令使用介紹及實戰講解
78利用awk命令解決企業級面試應用案例
79grep命令解決企業案例應用實戰講解及畫圖重要思想
80sed命令替換功能深度應用詳解及總結
81複雜企業級應用案例find配合sed綜合實戰講解
82第一關命令應用學習總結及大擴展命令重要講解
83Linux命令行重要快捷鍵講解
84SSH遠程連接原理及故障排錯詳解
85SSH客戶端的使用技巧1
86SSH遠程連接故障排錯詳解
87SSH客戶端實現和LINUX共享文件
88利用SSH客戶端批量管理LINUX重要應用
89SSH客戶端複製標籤機批量複製標籤小技巧
90VM快照-克隆重要應用講解及克隆後網卡問題解決
91查看Linux基本信息命令-uname-hostname及重要運維思想
92Linux系統useradd-passwd添加賬號密碼講解及su命令介紹
93Linux優化之Selinux詳解及運行級別詳解
94Linux優化之需要開機啓動的重點服務詳解
95Linux優化之利用chkconfig-sed-awk多種方法解決開機啓動實戰
96Linux優化之iptables防火牆處理及運維思想
97chkconfig命令應用小結
98Linux優化之安全最小化5個思想
99課後作業與預習
100重要基礎命令回顧複習
101極重要基礎命令三劍客加find回顧複習實戰
102sed命令實戰複習回顧
103awk命令實戰複習回顧
104grep命令實戰複習回顧
105上節Linux優化項複習
106超級優化Linux遠程SSH連接
107比較工具diff-vimdiff-windows比較工具講解
108運維思想-成功最有效的方法
109形象講解sudo命令簡單原理及實踐優化用戶使用命令
110sudo解決方案企業級應用實戰講解
111運維核心學習思想-總裁班分享潛意識問題
112which命令實戰及原理詳解-PATH實戰配置
113有關bash內置命令特殊性問題講解
114Linux字符集介紹及解決中文亂碼實戰
115運維核心思想-學會幫助鼓勵別人
116時間同步介紹及實戰配置-介紹定時任務及簡單配置
117時間同步服務企業生產應用架構說明
118優化終端超時以及歷史記錄數
119Linux歷史記錄數控制及隸屬記錄數文件控制
120文件描述符介紹作用及實戰配置方案
121Linux內核參數基礎優化
122隱藏LINUX軟件名及內核版本
123超級優化鎖定系統重要系統文件防止篡改
124禁PING以及清理系統多餘賬號說明
125爲grub引導菜單加密碼保護grub被隨意修改
126禁PING實戰及軟件漏洞升級
127linux系統基礎優化16條知識彙總
128配置Linux軟件下載更新源地址
129wget命令企業級應用參數詳解
130講過命令回顧及分類總結方法說明
131less-more使用方法及區別實戰講解
132Linux目錄結構知識介紹
133Linux目錄結構樹詳細原理講解
134Linux目錄結構的歷史介紹
135Linux目錄層次標準及目錄介紹
136linux重要目錄及子目錄介紹詳解
137Linux目錄結構重點小結回顧
138課後作業與預習
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章