閑來無事,想要學(xué)習(xí)一下Python,十月初的時候搭好了ubuntu的環(huán)境,用的是Ubuntu 16.04 32位+sublime Text3,輕量級的編程環(huán)境,感覺用起來還是比較舒服的。也陸陸續(xù)續(xù)地學(xué)習(xí)了一下python的語法和相關(guān)的知識點,并沒有感覺到python有什么特別的地方,數(shù)據(jù)結(jié)構(gòu)中的列表,元組和字典,還沒有感到其特點在哪里比較明顯,只是一個數(shù)據(jù)結(jié)構(gòu)而已。恰好學(xué)院老師讓搜集就業(yè)相關(guān)信息,所以就想嘗試去先寫一個爬蟲,爬一下相關(guān)網(wǎng)站的相關(guān)鏈接。先提起興趣,再去學(xué)習(xí)枯燥的知識點。
一開始以為會是很大的工程量,周五下午回到宿舍就開始查相關(guān)資料,看了一下鏈接,先Mark一下:汪海的實驗室,很多筆記,感覺應(yīng)該專業(yè)人士,而且很巧也是山大畢業(yè)的??吹搅艘粋€比較簡單的教程,利用審查元素和一個python的requests模塊發(fā)送請求,然后利用pyquery模塊來解析數(shù)據(jù)。當(dāng)然,具體的jquery語法是什么樣的我還是不清楚的=,=。教程中大體的思路就是在審查元素中,先定位自己想要爬取信息的位置,找到div的id,再找到具體的標(biāo)簽,然后就獲取到了標(biāo)題。當(dāng)然獲取的是一個列表數(shù)據(jù),不僅僅可以找出標(biāo)題,也可以提取出來鏈接。具體代碼和效果如下圖所示:
當(dāng)然,和教程還是有一點不一樣的,教程中是先定位了模塊的id,但是我們學(xué)校的就業(yè)信息網(wǎng)列表那里并沒有模塊的id,所以嘗試直接取獲取鏈接文本所在模塊的信息。獲取得到的內(nèi)容除了我想要的東西意外還有奇奇怪怪的東西,后來查了一下模塊的id是唯一的,但是模塊下的子名字是可以重復(fù)的,因為獲取的是列表,并且信息的格式基本上是固定的,所以直接獲取列表的一個子表就可以了,當(dāng)然=,=不懂html的我是不了解具體原因的。。
這樣就是靜態(tài)的抓取了一個網(wǎng)頁里面的部分文章標(biāo)題及鏈接,但是想實現(xiàn)的是提醒更新的功能。很自然地一個想法就是拿爬下來的內(nèi)容和之前的內(nèi)容進行比較,沒有更新的就直接忽略,有更新的話就把更新內(nèi)容保存下來,最后只提醒更新內(nèi)容就好了。正好python處理字符串還是比較人性化的,文件操作里面有f.readline(),同時可以直接進行字符串的比較,所以就拿爬下來的第一行數(shù)據(jù)和之前文件里的第一行數(shù)據(jù)進行比較,如果相同的話忽略本次爬取,不同的話循環(huán)比較,直到遇到相同的數(shù)據(jù),把之前的數(shù)據(jù)存到本地,實現(xiàn)更新內(nèi)容的動態(tài)提醒。最終實現(xiàn)了對三個網(wǎng)頁,山東大學(xué)(威海)就業(yè)信息網(wǎng)的兩個模塊和哈爾濱工業(yè)大學(xué)(威海)的一個模塊的數(shù)據(jù)提取。代碼如下:
因為對python語言不太熟悉,所以可能很多語法的寫法并不像python工程師的寫法,之后會系統(tǒng)地學(xué)習(xí)然后改過。
到這里還算比較順利的,代碼量不大,直接調(diào)庫就實現(xiàn)了我想要的功能,一共用了三四個小時的樣子,但是這樣明顯不能夠滿足我的需求,畢竟python是一個腳本文件,如果我想把它發(fā)給別人,那對方也必須要配置好pyt