wget、cURL網(wǎng)站相關(guān)

《LinuxShell腳本攻略》筆記竟宋,Chap-5: 一團(tuán)亂麻提完?沒(méi)這回事



入門

本章會(huì)研究一些用于解析網(wǎng)站內(nèi)容、下載數(shù)據(jù)丘侠、發(fā)送數(shù)據(jù)表單以及網(wǎng)站頗為任務(wù)自動(dòng)化之類的實(shí)例徒欣。我們可以僅用幾行腳本就將很多原本需要通過(guò)瀏覽器交互進(jìn)行的活動(dòng)管理自動(dòng)化。通過(guò)命令行工具利用HTTP協(xié)議所提供的功能蜗字,我們可以用腳本解決大部分Web自動(dòng)化的問(wèn)題帚称。


網(wǎng)站下載

使用一些命令行下載工具,從給定的URL中下載文件或網(wǎng)頁(yè)秽澳。
wget是一個(gè)用于文件下載的命令行工具闯睹,選項(xiàng)多且用法靈活。

#Wget - The non-interactive(非交互式) network downloader

wget URL1 URL2...
wget http://xxx.com/nginx-1.12.0.tag.gz
wget https://xxx/a.rpm http://xxxx/bb.rpm

#指定文件名担神,指定信息輸出(wget默認(rèn)是stdout)
wget http://mirrors.aliyun.com/repo/Centos-7.repo -O aliyun.repo -o ./wget.log
wget URL -t 5   #-t楼吃,重試次數(shù)

#下載限速
wget --limit-rate=10m URL   #下載限速
wget -Q 100m URL    #指定下載配額

#端點(diǎn)續(xù)傳
#wget進(jìn)行的下載在完成前被中斷,從斷點(diǎn)開(kāi)始下載
wget -c URL

#用cURL下載
#cURL是一個(gè)比wget更強(qiáng)大的高級(jí)命令工具
#和wget不同妄讯,curl并不將下載數(shù)據(jù)寫入文件孩锡,而是寫入stdout,因此必須重定向到文件

#復(fù)制或鏡像整個(gè)網(wǎng)站
#wget有一個(gè)選項(xiàng)可以使其像爬蟲一樣以遞歸方式手機(jī)網(wǎng)頁(yè)上所有URL鏈接亥贸,并逐個(gè)下載
#這樣一來(lái)就可以下載一個(gè)網(wǎng)站的所有頁(yè)面
wget --mirror URL
#-m(--mirror) -N -r -l inf --no-remove-listing 的縮寫形式躬窜。
或 wget -r -N -l DEPTH URL
#-r遞歸下載,-l指定遞歸深度炕置,-N(timestamp)只獲取比本地時(shí)間新的文件

#訪問(wèn)需要認(rèn)證的HTTP或FTP頁(yè)面
wget --user "username" --password "pass" URL
#如未在命令行內(nèi)輸入密碼荣挨,則會(huì)由網(wǎng)頁(yè)提示手動(dòng)輸入


以格式化純文本下載網(wǎng)頁(yè)

網(wǎng)頁(yè)其實(shí)就是包含HTML標(biāo)記和其他諸如Javascript,CSS等元素的HTML頁(yè)面朴摊。HTML標(biāo)記是網(wǎng)頁(yè)的基礎(chǔ)默垄,也許需要解析網(wǎng)頁(yè)來(lái)查找特定的內(nèi)容。

links,是一個(gè)基于命令行的Web瀏覽器

#links - lynx-like alternative character mode WWW browser

#在命令行中瀏覽一個(gè)網(wǎng)頁(yè)
links www.baidu.com

#以ASCII形式下載網(wǎng)頁(yè)
links --dump URL > URL.txt

#打開(kāi)本地html文件
links 1.html


cURL入門

cURL支持包括HTTP甚纲、HTTPS口锭、FTP在內(nèi)的眾多協(xié)議。它還支持POST介杆、cookie鹃操、認(rèn)證、從指定偏移處下載部分文件春哨、參照頁(yè)(referer)荆隘、用戶代理字符串、擴(kuò)展頭部(extra header)悲靴、限速臭胜、文件大小限制、進(jìn)度條等特性癞尚。

#curl - transfer a URL
#cURL通常將下載文件輸出到stdout耸三,將進(jìn)度信息輸出到stderr
#要想避免顯示進(jìn)度信息,可使用--silent
#curl可用來(lái)下載浇揩、發(fā)送各種HTTP請(qǐng)求仪壮、指定HTTP頭部等操作

curl URL --silent   #輸出到stdout

#-O寫入文件,文件名從URL中解析
curl http://www.baidu.com/index.html -O --silent    #創(chuàng)建index.html

#-o將數(shù)據(jù)寫入指定文件
curl URL -o baidu.html --progress   #--progress顯示進(jìn)度條
links baidu.html

#端點(diǎn)續(xù)傳
#和wget不同胳徽,cURL包含更高級(jí)的下載恢復(fù)特性积锅,能夠從特定的文件偏移處繼續(xù)下載
#curl可以通過(guò)指定一個(gè)偏移量來(lái)下載部分文件
手動(dòng):curl URL/file -C offset  #偏移量以Byte為單位的整數(shù)
自動(dòng):curl -C -URL #自動(dòng)續(xù)傳

#用cURL設(shè)置參照頁(yè)字符串, --referer
#參照頁(yè)(referer)是位于HTTP頭部中的一個(gè)字符串,用來(lái)標(biāo)識(shí)用戶從哪個(gè)頁(yè)面到達(dá)當(dāng)前頁(yè)面的
#如果用戶點(diǎn)擊網(wǎng)頁(yè)A中某個(gè)鏈接养盗,轉(zhuǎn)到了網(wǎng)頁(yè)B缚陷。那么網(wǎng)頁(yè)B頭部的referer會(huì)包含網(wǎng)頁(yè)A的URL
curl --referer Referer_URL target_URL
curl --referer http://www.baidu.com http://jianshu.com

#用cURL設(shè)置cookie, --cookie
#可以用curl來(lái)存儲(chǔ)HTTP操作過(guò)程中使用到的cookie
#cookie用key=value形式,指定多個(gè)用 分號(hào) 分隔
curl URL --cookie "user=AAA;name=bbb"
curl URL --cookie-jar cookie.txt    #將cookie另存為

#用cURL設(shè)置用戶代理字符串, --user-agent
#如果不指定代理往核,一些需要用戶代理的網(wǎng)頁(yè)就無(wú)法顯示
curl URL --user-agent(-A) "Mozilla"

#用-H "頭部信息"傳遞多個(gè)頭部信息
curl -H "Host:www.haha.com" -H "Accept-language: en" URL

#限定cURL可占用的帶寬
curl URL --limit-rate 10m

#指定最大下載量
curl URL --max-filesize 大小(Bytes)

#用cURL進(jìn)行認(rèn)證箫爷,-u username:password指定用戶名和密碼
curl -u user:pass URL
curl -u user URL    #手動(dòng)輸入密碼

#只打印響應(yīng)頭部信息(無(wú)數(shù)據(jù)部分), -I
curl -I URL


從命令行訪問(wèn)163郵箱

curl -u user http://mail.163.com
#手動(dòng)輸入密碼


制作圖片抓取器及下載工具

可以用腳本解析圖像文件并將圖片自動(dòng)下載下來(lái)。

curl -s URL | grep -o "<img src=[^>]*>" | sed 's/<img src=//g; s/>//g' > img.list
#匹配圖片的URL聂儒,可能還需要細(xì)化修改
#不同的URL可能有不同的規(guī)則虎锚,根據(jù)實(shí)際情況取出img的URL

#下載圖片
wget $URL 或 curl -s -O $URL


查找網(wǎng)站中的無(wú)效鏈接

將查找無(wú)效鏈接的工作自動(dòng)化,那就比純手動(dòng)厲害多了衩婚!

lynx -traversal URL #會(huì)將URL中所有鏈接生成到reject.dat文件中
sort -u reject.dat | while read link
do
    output=`curl -I $link -s | grep "HTTP/.*OK"`
    if [[ -z $output ]]
    then
        echo $link
    fi
done < links.txt


跟蹤網(wǎng)站變更

可以編寫一個(gè)定期運(yùn)行的變更跟蹤器(change tracker)窜护,一旦發(fā)生變更,跟蹤器便會(huì)發(fā)出聲音或發(fā)送提示信息非春。
在不同時(shí)間檢索網(wǎng)站柱徙,然后利用 diff 命令進(jìn)行比對(duì)。

curl URL --silent -o `date +%F`.html    #第一次
curl URL --silent -o `date +%F`.html    #第二次
diff -u 第一次 第二次


以POST方式發(fā)送網(wǎng)頁(yè)并讀取響應(yīng)

POST 和 GET 是HTTP協(xié)議中用于發(fā)送或檢索信息的兩種請(qǐng)求類型奇昙。
在GET請(qǐng)求方式中坐搔,利用網(wǎng)頁(yè)的URL來(lái)發(fā)送參數(shù)(“鍵-值”);而POST方式用于提交表單敬矩,如提交用戶名概行、密碼以及檢索登錄頁(yè)面等。

curl URL -d “postarg=AABBCC” #-d,http post data
curl URL -d "post1=key1&post2=key2&post3..."    #指定多個(gè)數(shù)據(jù)

wget URL -post-data "post1=key1"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末弧岳,一起剝皮案震驚了整個(gè)濱河市凳忙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌禽炬,老刑警劉巖涧卵,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異腹尖,居然都是意外死亡柳恐,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)乐设,“玉大人讼庇,你說(shuō)我怎么就攤上這事〗校” “怎么了蠕啄?”我有些...
    開(kāi)封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)戈锻。 經(jīng)常有香客問(wèn)我歼跟,道長(zhǎng),這世上最難降的妖魔是什么格遭? 我笑而不...
    開(kāi)封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任哈街,我火速辦了婚禮,結(jié)果婚禮上拒迅,老公的妹妹穿的比我還像新娘叹卷。我一直安慰自己,他們只是感情好坪它,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布骤竹。 她就那樣靜靜地躺著,像睡著了一般往毡。 火紅的嫁衣襯著肌膚如雪蒙揣。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天开瞭,我揣著相機(jī)與錄音懒震,去河邊找鬼。 笑死嗤详,一個(gè)胖子當(dāng)著我的面吹牛个扰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播葱色,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼递宅,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了苍狰?” 一聲冷哼從身側(cè)響起办龄,我...
    開(kāi)封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎淋昭,沒(méi)想到半個(gè)月后俐填,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡翔忽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年英融,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盏檐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡驶悟,死狀恐怖胡野,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情撩银,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布豺憔,位于F島的核電站额获,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏恭应。R本人自食惡果不足惜抄邀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望昼榛。 院中可真熱鬧境肾,春花似錦、人聲如沸胆屿。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)非迹。三九已至环鲤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間憎兽,已是汗流浹背冷离。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留纯命,地道東北人西剥。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像亿汞,于是被迫代替她去往敵國(guó)和親瞭空。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理疗我,服務(wù)發(fā)現(xiàn)匙铡,斷路器,智...
    卡卡羅2017閱讀 134,600評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,520評(píng)論 25 707
  • 所有的起心動(dòng)念碍粥、負(fù)面情緒都是能量的消耗和浪費(fèi)鳖眼,節(jié)省下來(lái)的就是生命,而節(jié)省的過(guò)程就是修行嚼摩。
    Looloo閱讀 174評(píng)論 0 1
  • 幼時(shí)體弱钦讳,遇涼必病矿瘦,便萌生了鍛煉身體的念頭。 約七八歲的年紀(jì)愿卒,看了黃元申演的《大俠霍元甲》缚去,又有了做俠客的想法。 ...
    寧國(guó)截拳道舒擁軍閱讀 318評(píng)論 0 0
  • 陣陣疾風(fēng)掃落英 悲秋萬(wàn)里嘆曾經(jīng) 匆匆歲月一年又 片片楓紅不了情 注~~仄起首句入韻琼开,中華新韻
    澄默時(shí)節(jié)閱讀 1,285評(píng)論 10 23