抓取網頁的腳本

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

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

先上腳本mysql

[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 linux

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