本系列我將與大家一起學(xué)習(xí)批量下載任意公眾號所有歷史文章坝初。
爭取講明白俺榆,源代碼也會隨著教程逐步放出來赞枕,但是不喜歡伸手黨和不過如此黨(凡事都說雖然我不會但我覺得不難的人)垮斯。
用戶需要有一定的基礎(chǔ):
知道百度這個神奇的網(wǎng)站刻获,而且知道是免費的蜀涨。
遇到問題先自行嘗試解決,不要張口就問蝎毡。
有html基礎(chǔ)(可去?http://www.runoob.com?學(xué)習(xí))厚柳。
有python基礎(chǔ),會用pip安裝第三方庫(強烈建議新手去http://www.liaoxuefeng.com?看免費版教程沐兵,里面也包含了如何在電腦上安裝配置python)
會用chrome的開發(fā)者工具别垮。
會了第1、2條扎谎,則第3碳想、4條應(yīng)該可以搞定。第5條在本文會講到基礎(chǔ)用法毁靶。
先請由本人扮演的政委講兩句:
先說點成果給大家點信心:本人2年前就已經(jīng)用python完整實現(xiàn)了批量下載任意公眾號歷史文章的功能移袍,1年前又用C#重寫了整個功能,做出了界面漂亮的軟件老充。為了避免讓小白誤以為本教程的終極目標是做一個圖形化的軟件我就不貼圖了葡盗。本教程是用python代碼實現(xiàn)批量下載功能,沒有圖形界面啡浊。重要的是讓大家體會到整個過程中的思路觅够,這樣將來你想保存其他任何網(wǎng)站都不再是難事。
本人非計算機科班出身巷嚣,在第一遍開發(fā)這套軟件的過程中走了許多彎路喘先,踩了許多坑,雖然現(xiàn)在依然是個小白廷粒,但至少可以為大家理出一條稍好走的路窘拯。為方便大家理解和操作,有的地方會采用麻煩點但好理解的方案坝茎。
本教程的目的是讓有一定編程基礎(chǔ)涤姊,想自己寫個爬蟲,但是不知從何下手嗤放,或者多次嘗試過但多次卡殼的朋友能快速搭建出一個完整的系統(tǒng)思喊。
我將盡量接地氣、以最簡潔的形式實現(xiàn)所有功能次酌,所以恨课,不要擔(dān)心完不成舆乔,多一點堅持,多給自己打打氣剂公。
下面請由本人扮演的老兵給參加本次特訓(xùn)營的朋友們開始講解:
公眾號文章不管是在PC端還是手機端還是瀏覽器中希俩,其實都是以網(wǎng)頁的形式呈現(xiàn)的,而保存電腦上的網(wǎng)頁版最為方便纲辽。
工欲擅其事必先利其器颜武,為照顧大多數(shù)人能聽懂下面可能有點啰嗦,但不難文兑,而且學(xué)會了對以后大有幫助盒刚。
想下載網(wǎng)頁就要先研究網(wǎng)頁,它是由什么組成的绿贞?從哪里來的因块?
在chrome(QQ瀏覽器、360瀏覽器中應(yīng)該有類似選項籍铁,但不推薦用IE)中打開任意一篇公眾號文章涡上。
按F12鍵,或者在網(wǎng)頁上右鍵->"檢查"拒名,將打開如下圖所示的一個窗口吩愧,這個窗口的最左上角文字是"DevTools"直譯為"開發(fā)者工具",下面會經(jīng)常提到增显。有的電腦上可能是將網(wǎng)頁窗口一分為二雁佳,下半部分彈出這個開發(fā)者工具窗口。顯示方式的不同可以通過點下圖中右上角的三個點切換同云,讀者視自己的電腦屏幕大小適當(dāng)選擇即可糖权。
再看上圖的第一行有許多標簽,我們需要用到"Elements"炸站,"Network"兩個標簽星澳。
先點"Elements",會看到許多有層次的格式化過的代碼旱易,這其實就是網(wǎng)頁的html元素結(jié)構(gòu)禁偎。先點擊下圖紅框所示的小圖標,然后將鼠標移動到文章的正文段落處阀坏,發(fā)現(xiàn)文字自動被選中一塊如暖,同時右側(cè)會有一段與之對應(yīng)的代碼也會變背景色。通過這種方式將源代碼與最終呈現(xiàn)的內(nèi)容一一對應(yīng)起來全释,這也是網(wǎng)頁編輯人員在調(diào)試時經(jīng)常用到的方法装处。
來點有趣的,雙擊右側(cè)源代碼中的"一周前"浸船,然后將其修改為 "1986-01-01"妄迁,回車,看看日期那里是不是也變了李命?其實許多裝X的網(wǎng)頁截圖都不需要用PS登淘,直接這樣改源代碼就可以了。
如果再刷新一下網(wǎng)頁封字,會發(fā)現(xiàn)剛才修改的內(nèi)容又回到原始狀態(tài)了黔州,因為我們剛才只是修改本地的內(nèi)容,而刷新是從微信的服務(wù)器上又重新獲取了原始網(wǎng)頁阔籽。否則流妻,如果我能這樣在銀行網(wǎng)站修改我的銀行存款就好了,哈哈笆制。
再回到開發(fā)者工具窗口绅这,點"Network"標簽,按F5刷新網(wǎng)頁(一定要先打開開發(fā)者工具再加載網(wǎng)頁它才能監(jiān)測到數(shù)據(jù)的加載)在辆,會看到下面飛快得列出許多內(nèi)容证薇。不知道是些啥玩意?其實這是一個網(wǎng)頁要正常顯示需要下載的所有文件(比如圖片匆篓,css樣式表浑度,js腳本等),一個看似簡單的網(wǎng)頁背后可能是由許多文件組成的(當(dāng)然也可以只有一個文件)鸦概,而我們要保存文章正是要把每一行所列出來的文件都保存下來箩张。
單擊第一行(一定是第一行),窗口將變成下圖窗市,在這個窗口的右半部分會列出當(dāng)前選中的這一行的詳細請求內(nèi)容先慷。
下圖紅框中有一排標簽欄,不要抓狂谨设,把這組標簽看完略枯燥的內(nèi)容就結(jié)束了^_^
先點 Preview 標簽熟掂,好像顯示了一個網(wǎng)頁,再點 Response 標簽扎拣,好像是一個網(wǎng)頁的源代碼赴肚?對的,Response是原始代碼二蓝,Preview是將代碼轉(zhuǎn)化成網(wǎng)頁誉券。
那么,原始代碼是怎么來的呢刊愚?點 Headers 標簽踊跟,看下圖,天吶,又是一堆英文商玫,不急不急箕憾,都是些常見單詞,而且這些代碼其實是分三大塊拳昌,分別為"General"袭异、"Response Headers"、"Request Headers"炬藤,(當(dāng)然有時候還會有更多塊)
謝天謝地御铃,只需要看這三大塊的名字就可以了,不需要看里面的內(nèi)容沈矿。而這些數(shù)據(jù)塊正是對應(yīng)著瀏覽器加載網(wǎng)頁的流程:
General包含要向微信服務(wù)器請求的基礎(chǔ)數(shù)據(jù)上真,比如請求的網(wǎng)址,請求的方式羹膳。
Request Headers中也是包含請求信息睡互,比如瀏覽器是手機版的還是電腦版的,當(dāng)前電腦環(huán)境是英文的還是中文的溜徙,有的需要會員登錄才能看的還會帶上會員信息(當(dāng)然是加密過的)
瀏覽器把這些請求數(shù)據(jù)準備好湃缎,一起發(fā)送給微信服務(wù)器。微信服務(wù)器收到之后會在后臺找到這篇文章蠢壹,并發(fā)回給瀏覽器嗓违。
瀏覽器會先檢查返回的 Response Headers,可以把它理解成返回的一本書的封皮图贸,上面會寫著你想請求的那篇文章是返回成功了還是失敗了蹂季,文章一共有多長,等等疏日。
那我想看的文章呢偿洁?就是你剛才看到的Response標簽里的那一堆代碼。瀏覽器會把它轉(zhuǎn)換為最終網(wǎng)頁的形式沟优。
我花了許多篇幅向大家介紹chrome開發(fā)者工具涕滋,是因為這是爬蟲開發(fā)必備技能,但它又不是只能為爬蟲開發(fā)者所用挠阁,希望大家能多多嘗試宾肺,反正怎么搞又搞不壞,其中有趣的技巧還有許多哦侵俗。
小結(jié):
學(xué)會使用chrome開發(fā)者工具分析和調(diào)試網(wǎng)頁锨用。
對網(wǎng)頁的加載流程有初步認識。
有所收獲又似懂非懂中對接下來的學(xué)習(xí)有所期待
其實寫這種教程極易陷入明白的人不需要看隘谣,不明白的人看了依然不會的情況增拥,所以我要講得足夠詳細,為了防止讀者看睡著了又得適當(dāng)精煉。第一次寫教程掌栅,請多擔(dān)待秩仆。
接下來的章節(jié)就好辦了,因為有代碼寫渣玲,有數(shù)據(jù)顯示逗概,相對來說生動了許多弟晚。
本文會同步在多個平臺忘衍,由于有的平臺發(fā)文后不可修改,所以勘誤和難點解釋請注意查看文后留言卿城,也可以查看我的個人博客版
打算建個github項目枚钓,把代碼都上傳上去,也考慮建個QQ交流群瑟押。會在后續(xù)文章中公布這些信息搀捷。對于本系列課程有啥建議也歡迎留言。
關(guān)注本號多望,查看后續(xù)更新嫩舟。