應(yīng)氣人的鄧小豬的要求,寫總結(jié)?。。。。?!
前情提要:
暑假學(xué)習(xí)第一周總結(jié):本周主要目標(biāo)在于學(xué)習(xí)基礎(chǔ)的爬蟲,了解什么是爬蟲,如何爬取網(wǎng)頁上的數(shù)據(jù)并成功實現(xiàn)簡單的爬蟲。(學(xué)習(xí)借鑒他人簡書爬蟲知識)
完成情況:0.5%(哈哈哈哈哈哈哈哈哈哈哈哈)
故事結(jié)局
最終完成成果:
- 配置python環(huán)境和爬蟲基本環(huán)境
- 完成所看簡書一二部分內(nèi)容,第三部分內(nèi)容基本理解,但并沒有實現(xiàn)代碼部分(因為我不懂怎么用那個庫?。。?!一點都不懂!?。。。?br> 由于看過別人代碼之后雖然大致明白爬蟲機(jī)理,但是自己基礎(chǔ)知識太薄弱并不懂那些庫函數(shù)的使用吧啦吧啦,so,實現(xiàn)簡單爬蟲轉(zhuǎn)變?yōu)閷W(xué)習(xí)基礎(chǔ)知識,正所謂厚積薄發(fā),要有扎實的基礎(chǔ)知識才可以寫出代碼(哈哈哈哈哈哈哈哈)所以本渣渣開始學(xué)習(xí)廖雪峰大佬的python2.7教程(本人所用python環(huán)境為2.7)
- 學(xué)習(xí)python基礎(chǔ)知識(學(xué)了一半,學(xué)到函數(shù)式編程)
接下來,開始正式的知識回顧啦(哈哈哈哈哈):
故事發(fā)展
配置環(huán)境
本機(jī)所用配置:python:2.7版本,win7電腦環(huán)境,windows環(huán)境下
爬蟲環(huán)境:
- 四個依賴的庫文件:
- beautifulsoup庫:快速處理抓取下來的數(shù)據(jù)。
- requests模塊:主要負(fù)責(zé)網(wǎng)絡(luò)功能。
- lxml庫:配合beautifulsoup庫使用。
- pymongo庫:和mongoDB數(shù)據(jù)庫交互,數(shù)據(jù)存儲在mongoDB數(shù)據(jù)庫中。
- pip:利用pip命令安裝庫文件
- mongoDB數(shù)據(jù)庫:存放爬取的數(shù)據(jù)
安裝
- 安裝pip: 上python官網(wǎng)下載pip安裝包,具體過程如網(wǎng)址[pip安裝]http://www.tuicool.com/articles/eiM3Er3
安裝過程中在添加pip環(huán)境變量這里,折騰了半天都不行,特別注意:按照步驟安裝pip添加環(huán)境變量時要將pip.exe的路徑加入到path環(huán)境變量中。
在利用python setup.py install命令安裝pip時,并沒有安裝到自己所解壓縮的文件夾下,而是安裝在本機(jī)安裝python時的python文件夾下,因此正確的路徑應(yīng)該是某盤:\python安裝文件夾\Scripts文件夾,在這個路徑下應(yīng)該可以找到pip.exe文件(具體情況具體分析) - 利用pip命令安裝庫文件(具體命令參考簡書爬蟲教程)
- 安裝mongoDB
至此,環(huán)境配置完成,可以開始正式學(xué)習(xí)爬蟲了?(?òωó?)?
教程三簡單爬蟲demo分析
給了一個小代碼來分析對瓜子二手網(wǎng)的車輛信息的爬取和檢索,在這個部分雖然代碼可以理解,但是代碼中具體的函數(shù)如何使用并不了解,而且python語法太弱所以大致看懂怎么回事之后開始python語法的具體學(xué)習(xí)。
這個demo顯示了爬蟲的大致的流程:
- 首先:要找到我們要爬取的數(shù)據(jù)的URL,對于要爬取的網(wǎng)頁地址進(jìn)行分析找到其中的規(guī)律,例如瓜子網(wǎng)車輛信息有多頁,第一頁為o1,第二頁為o2,以此類推。可以依據(jù)找到的規(guī)律構(gòu)建一個list,然后對每個地址進(jìn)行爬取。
- 對每個地址爬取的操作:得到網(wǎng)頁URL后,對具體某輛車進(jìn)行分析,獲取他的CSS地址,對CSS地址進(jìn)行過濾分析,去掉無用的前綴,獲取我們所需要的車輛信息的的CSS地址鏈,例如價格,然后對其進(jìn)行處理。通過庫函數(shù)和地址獲取其中的有用信息。
這是一個簡單的爬蟲demo,整個原理和代碼不難理解,接下來是熟悉庫函數(shù)和學(xué)會如何使用。
python基礎(chǔ)知識學(xué)習(xí)
剛開始想能看懂就行,后來發(fā)現(xiàn)不行,自己的語法太弱,沒有怎么學(xué)過,所以開始大致的看python基礎(chǔ)教程,是廖雪峰的python2.7教程[python教程]https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000
看到了函數(shù)式編程這一部分,具體知識教程里有,此處僅寫一下再看教程時自己動手試驗得到的一些小知識和學(xué)到的一些新函數(shù)。
-
{'a':1,'b':2,'c':3}['a'] = 1
開始不懂這個代碼為什么這么寫,結(jié)果為什么是1,然后發(fā)現(xiàn)它等于一下代碼:
t = {'a':1,'b':2,'c':3}
t['a'] = 1
其實就是求一個字典里某個key的value值。
- t.pop('a')函數(shù)是返回'a'的value值:1
因此注意一下二者的區(qū)別(一不小心就搞錯了-_-):
t = {'a':1,'b':2,'c':3}.pop('a') //t=4
t = {'a':1,'b':2,'c':3}
s = t.pop(4) //這時t是一個list,s=4
- 明白可變對象與不可變對象的區(qū)別,重點!重點!重點!
字符串是不可變對象!
s = 'abc'
t = s
s = 'abcd'
//t='abc',s='abcd'
在創(chuàng)建字符串時,python先在內(nèi)存里創(chuàng)建一個'abc'變量,然后將s指向的地址指向它,接著創(chuàng)建了t變量,t = s,將t指向的地址指向s所指向的地址即'abc'變量而非s,接著s = 'abcd',python在內(nèi)存里創(chuàng)建'abcd'變量,改變s所指向的地址。(好繞口,廖雪峰教程里有具體的圖,清晰明了,具體如下)

- 關(guān)于字符串的幾個函數(shù):upper(),lower(),capitalize(),capwords(),strip()
- upper()和lower(): upper()將字符串的各個字母大寫,lower()則是小寫,結(jié)合上面的字符串不可變性,有個小程序理解:
t = 'abc'
t.upper() //t = 'abc'
在做廖雪峰大大布置的課后題時發(fā)現(xiàn)的問題,本來以為t.upper()后t會變成'ABC',實際運(yùn)行結(jié)果不對,還是'abc',然后明白過來t.upper()在內(nèi)存中先建了一個變量'ABC',然而t所指向的內(nèi)容依舊不變。
- capitalize()方法: 將一個字符串的第一個字母大寫,其余字母變?yōu)樾?,例如?/li>
s = 'abcDEf'
s1 = ' abcDEf'
s.capitalize() //結(jié)果為'Abcdef'
s1.capitalize() //結(jié)果為' abcdef' 第一個字符是空格
- capwords()函數(shù):這個函數(shù)的具體過程如下:先調(diào)用s.split()將字符串s分解成單詞,然后調(diào)用s.capitalize()函數(shù)將每個單詞的首字母大寫其他字母小寫,然后在調(diào)用s.join()函數(shù)將單詞連接起來成為句子,他有兩個參數(shù),第一個參數(shù)是字符串s,第二個參數(shù)是分解成單詞時的分隔符,默認(rèn)為空格
s = 'pigDeng iS a BIG piG'
capwords(s) // 結(jié)果: 'Pigdeng Is A Big Pig'
capwords(s,None) // 結(jié)果: 'Pigdeng Is A Big Pig'
capwords('abcDacdaDEf',a) //結(jié)果: 'aBcdaCdaDef' a是分隔符,不做處理,可以看作是空格
- strip()函數(shù):去掉字符串頭尾指定的字符
s = '0000pigDeng is a big pig000'\
s.strip('0') //結(jié)果:'pigDeng is a big pig'
綜上,python包含的機(jī)制太高級,可以很輕松的調(diào)用代碼,不用亂七八糟寫一通確實還挺方便哈哈哈哈哈。
阿阿阿阿阿阿阿阿阿阿總結(jié)終于結(jié)束了,累死爸爸了,下周繼續(xù)!睡覺了,呼呼呼~