linux shell 豆瓣,用Linux shell脚本爬取豆瓣邮箱
前兩天總結(jié)一下郵箱格式的正則表達(dá)式,寫了一個(gè)腳本來(lái)判斷輸入的郵箱地址是否符合郵箱的格式(有興趣的朋友可以翻一下我的博客去看一下)。在網(wǎng)上找資料的時(shí)候,發(fā)現(xiàn)基本都是用Python和Java來(lái)做爬蟲,當(dāng)然Python的居多。本著學(xué)習(xí)的心態(tài),既然得到了郵箱地址有效性的判斷,那就順便用腳本寫一個(gè)抓取網(wǎng)頁(yè)郵箱的爬蟲吧。
豆瓣上著了一個(gè)網(wǎng)頁(yè),是一個(gè)人發(fā)起了一項(xiàng)活動(dòng),讓大家留下郵箱,然后和陌生人進(jìn)行郵箱通信,增加溫暖。(也是很感性呢),不過(guò)現(xiàn)在的人們?cè)絹?lái)越離不開手機(jī)了,在這個(gè)活動(dòng)中也許能找到以往那種陌生的溫暖呢。網(wǎng)頁(yè)網(wǎng)址是:https://www.douban.com/group/topic/41562980/?start=0。大家可以進(jìn)去看看,也可以參加進(jìn)去,離開手機(jī)一會(huì)。
找到網(wǎng)頁(yè)之后,下一步就是寫腳本了。
腳本解釋:
第5行:www是獲取網(wǎng)址,把含有郵箱地址的網(wǎng)址輸入。
第6行:用curl來(lái)抓取網(wǎng)頁(yè)內(nèi)容,并下載到文件2data.txt里面。
第7行:取得上一步文件的所有行數(shù),方便做循環(huán)。
第8-11行:這個(gè)For循環(huán)就是遍歷所有行,并且把包含郵箱的行重定向到文件1return.txt里面。其中:sed是打印指定的行,egrep是過(guò)濾出包含郵箱地址的行。為什么用egrep而不用grep呢,有興趣的朋友參考我的博客,Linux shell驗(yàn)證郵箱合法性。
執(zhí)行之后,給大家看一下那兩個(gè)文件:
為了保護(hù)隱私允許我自行打碼。
暫時(shí)初步拿到了郵箱,但是含有郵箱的文件里面還是好多東西,我們可以進(jìn)一步的清理。觀察發(fā)現(xiàn),包含郵箱的行基本都是
郵箱地址。。。,我們可以通過(guò)sed命令把郵箱地址前面的
給刪除,怎么來(lái)做呢?
可以看到,大部分郵箱前面的部分給清理掉了,但是我們還發(fā)現(xiàn)后面還有好多是
結(jié)尾的,然后我們可以再一次使用sed命令把后面的部分刪除(其實(shí)這一步是可以和上一步通過(guò)管道|命令一次執(zhí)行的)。當(dāng)然上述步驟只是清理大部分內(nèi)容,還有些則是需要人工干預(yù)的。經(jīng)過(guò)一番努力,最后就可以得到你期望的郵箱地址了。
格式完美,于是我想我也要給這些人發(fā)郵件,傳遞時(shí)間陌生人之間的溫暖,于是把文件通過(guò)Samba共享(下次更新Samba共享)到Windows里面去了。打開之后我就納悶了,效果如下:
在Linux下明明是一行行多么整齊,怎么到了Windows就成了一行了呢?后來(lái)經(jīng)過(guò)查閱資料發(fā)現(xiàn),原來(lái)是因?yàn)長(zhǎng)inux和Windows下文件換行的符號(hào)是不一樣的,Windows下?lián)Q行是"\r\n",而Linux下是"\n",Mac下是"\r"。所以在Windows下打開Linux系統(tǒng)的文件只顯示了一行。
那怎么讓才能讓windows下打開Linux的文件正常的顯示呢?
我們可以通過(guò)一個(gè)命令轉(zhuǎn)換一下就可以了,那就是unix2dos:將具有unix格式的文件轉(zhuǎn)換為Windows下的格式。這個(gè)命令還有一個(gè)雙胞胎弟弟:dos2unix:它的功能和哥哥的功能正相反。
命令格式:unix2dos(dos2unix)[-kh]oldfile ? ? ? newfile
-k 保留源文件的mtime(使用這個(gè)選項(xiàng)后面不用加newfile)
-h 保留原來(lái)的舊文件,并將轉(zhuǎn)換后的文件輸出到新文件
如果Linux上沒(méi)有這個(gè)命令,安裝一下就可以了:yum install -y unix2dos.
安裝好之后開始轉(zhuǎn)換:
轉(zhuǎn)換之后的效果:
這樣就看著舒服多了呢。
總結(jié):Linux shell腳本呢主要用于監(jiān)控運(yùn)維,當(dāng)然從上面來(lái)看爬取網(wǎng)頁(yè)其實(shí)也是蠻簡(jiǎn)潔的,只需要幾行代碼就OK了,但是后續(xù)的處理可就稍微復(fù)雜一些。往后學(xué)了Java和Python之后,然后再寫一下Java和Python的爬蟲對(duì)比一下。對(duì)爬取郵箱做個(gè)全面的總結(jié)。今天就到這了,明天總結(jié)Samba下Linux和Windows的文件共享。
總結(jié)
以上是生活随笔為你收集整理的linux shell 豆瓣,用Linux shell脚本爬取豆瓣邮箱的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python requests get
- 下一篇: 太极发送卡片软件_QQ卡片式消息一键发送