應(yīng)氣人的鄧小豬的要求,寫總結(jié)P扌怠V耗痢!?衔邸G痰ァ!
前情提要:
暑假學(xué)習(xí)第一周總結(jié):本周主要目標(biāo)在于學(xué)習(xí)基礎(chǔ)的爬蟲蹦渣,了解什么是爬蟲哄芜,如何爬取網(wǎng)頁上的數(shù)據(jù)并成功實(shí)現(xiàn)簡(jiǎn)單的爬蟲。(學(xué)習(xí)借鑒他人簡(jiǎn)書爬蟲知識(shí))
完成情況:0.5%(哈哈哈哈哈哈哈哈哈哈哈哈)
故事結(jié)局
最終完成成果:
- 配置python環(huán)境和爬蟲基本環(huán)境
- 完成所看簡(jiǎn)書一二部分內(nèi)容柬唯,第三部分內(nèi)容基本理解忠烛,但并沒有實(shí)現(xiàn)代碼部分(因?yàn)槲也欢趺从媚莻€(gè)庫!Hǘ骸C朗冤议!一點(diǎn)都不懂!J病K∷帷!)
由于看過別人代碼之后雖然大致明白爬蟲機(jī)理胯陋,但是自己基礎(chǔ)知識(shí)太薄弱并不懂那些庫函數(shù)的使用吧啦吧啦蕊温,so,實(shí)現(xiàn)簡(jiǎn)單爬蟲轉(zhuǎn)變?yōu)閷W(xué)習(xí)基礎(chǔ)知識(shí)遏乔,正所謂厚積薄發(fā)义矛,要有扎實(shí)的基礎(chǔ)知識(shí)才可以寫出代碼(哈哈哈哈哈哈哈哈)所以本渣渣開始學(xué)習(xí)廖雪峰大佬的python2.7教程(本人所用python環(huán)境為2.7) - 學(xué)習(xí)python基礎(chǔ)知識(shí)(學(xué)了一半,學(xué)到函數(shù)式編程)
接下來盟萨,開始正式的知識(shí)回顧啦(哈哈哈哈哈):
故事發(fā)展
配置環(huán)境
本機(jī)所用配置:python:2.7版本凉翻,win7電腦環(huán)境,windows環(huán)境下
爬蟲環(huán)境:
- 四個(gè)依賴的庫文件:
- beautifulsoup庫:快速處理抓取下來的數(shù)據(jù)捻激。
- requests模塊:主要負(fù)責(zé)網(wǎng)絡(luò)功能制轰。
- lxml庫:配合beautifulsoup庫使用。
- pymongo庫:和mongoDB數(shù)據(jù)庫交互胞谭,數(shù)據(jù)存儲(chǔ)在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)境變量時(shí)要將pip.exe的路徑加入到path環(huán)境變量中。
在利用python setup.py install命令安裝pip時(shí)旺垒,并沒有安裝到自己所解壓縮的文件夾下脉漏,而是安裝在本機(jī)安裝python時(shí)的python文件夾下,因此正確的路徑應(yīng)該是某盤:\python安裝文件夾\Scripts文件夾袖牙,在這個(gè)路徑下應(yīng)該可以找到pip.exe文件(具體情況具體分析) - 利用pip命令安裝庫文件(具體命令參考簡(jiǎn)書爬蟲教程)
- 安裝mongoDB
至此侧巨,環(huán)境配置完成,可以開始正式學(xué)習(xí)爬蟲了?(?òωó?)?
教程三簡(jiǎn)單爬蟲demo分析
給了一個(gè)小代碼來分析對(duì)瓜子二手網(wǎng)的車輛信息的爬取和檢索鞭达,在這個(gè)部分雖然代碼可以理解司忱,但是代碼中具體的函數(shù)如何使用并不了解,而且python語法太弱所以大致看懂怎么回事之后開始python語法的具體學(xué)習(xí)畴蹭。
這個(gè)demo顯示了爬蟲的大致的流程:
- 首先:要找到我們要爬取的數(shù)據(jù)的URL坦仍,對(duì)于要爬取的網(wǎng)頁地址進(jìn)行分析找到其中的規(guī)律,例如瓜子網(wǎng)車輛信息有多頁叨襟,第一頁為o1,第二頁為o2繁扎,以此類推。可以依據(jù)找到的規(guī)律構(gòu)建一個(gè)list梳玫,然后對(duì)每個(gè)地址進(jìn)行爬取爹梁。
- 對(duì)每個(gè)地址爬取的操作:得到網(wǎng)頁URL后,對(duì)具體某輛車進(jìn)行分析提澎,獲取他的CSS地址姚垃,對(duì)CSS地址進(jìn)行過濾分析,去掉無用的前綴盼忌,獲取我們所需要的車輛信息的的CSS地址鏈积糯,例如價(jià)格,然后對(duì)其進(jìn)行處理谦纱。通過庫函數(shù)和地址獲取其中的有用信息看成。
這是一個(gè)簡(jiǎn)單的爬蟲demo,整個(gè)原理和代碼不難理解跨嘉,接下來是熟悉庫函數(shù)和學(xué)會(huì)如何使用川慌。
python基礎(chǔ)知識(shí)學(xué)習(xí)
剛開始想能看懂就行,后來發(fā)現(xiàn)不行偿荷,自己的語法太弱,沒有怎么學(xué)過唠椭,所以開始大致的看python基礎(chǔ)教程跳纳,是廖雪峰的python2.7教程[python教程]https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000
看到了函數(shù)式編程這一部分,具體知識(shí)教程里有贪嫂,此處僅寫一下再看教程時(shí)自己動(dòng)手試驗(yàn)得到的一些小知識(shí)和學(xué)到的一些新函數(shù)寺庄。
-
{'a':1,'b':2,'c':3}['a'] = 1
開始不懂這個(gè)代碼為什么這么寫,結(jié)果為什么是1力崇,然后發(fā)現(xiàn)它等于一下代碼:
t = {'a':1,'b':2,'c':3}
t['a'] = 1
其實(shí)就是求一個(gè)字典里某個(gè)key的value值斗塘。
- t.pop('a')函數(shù)是返回'a'的value值:1
因此注意一下二者的區(qū)別(一不小心就搞錯(cuò)了-_-):
t = {'a':1,'b':2,'c':3}.pop('a') //t=4
t = {'a':1,'b':2,'c':3}
s = t.pop(4) //這時(shí)t是一個(gè)list,s=4
- 明白可變對(duì)象與不可變對(duì)象的區(qū)別亮靴,重點(diǎn)馍盟!重點(diǎn)!重點(diǎn)茧吊!
字符串是不可變對(duì)象贞岭!
s = 'abc'
t = s
s = 'abcd'
//t='abc',s='abcd'
在創(chuàng)建字符串時(shí),python先在內(nèi)存里創(chuàng)建一個(gè)'abc'變量搓侄,然后將s指向的地址指向它瞄桨,接著創(chuàng)建了t變量,t = s讶踪,將t指向的地址指向s所指向的地址即'abc'變量而非s芯侥,接著s = 'abcd',python在內(nèi)存里創(chuàng)建'abcd'變量,改變s所指向的地址柱查。(好繞口廓俭,廖雪峰教程里有具體的圖,清晰明了物赶,具體如下)
- 關(guān)于字符串的幾個(gè)函數(shù):upper(),lower(),capitalize(),capwords(),strip()
- upper()和lower(): upper()將字符串的各個(gè)字母大寫白指,lower()則是小寫,結(jié)合上面的字符串不可變性酵紫,有個(gè)小程序理解:
t = 'abc'
t.upper() //t = 'abc'
在做廖雪峰大大布置的課后題時(shí)發(fā)現(xiàn)的問題告嘲,本來以為t.upper()后t會(huì)變成'ABC',實(shí)際運(yùn)行結(jié)果不對(duì)奖地,還是'abc'橄唬,然后明白過來t.upper()在內(nèi)存中先建了一個(gè)變量'ABC',然而t所指向的內(nèi)容依舊不變参歹。
- capitalize()方法: 將一個(gè)字符串的第一個(gè)字母大寫仰楚,其余字母變?yōu)樾懀纾?/li>
s = 'abcDEf'
s1 = ' abcDEf'
s.capitalize() //結(jié)果為'Abcdef'
s1.capitalize() //結(jié)果為' abcdef' 第一個(gè)字符是空格
- capwords()函數(shù):這個(gè)函數(shù)的具體過程如下:先調(diào)用s.split()將字符串s分解成單詞犬庇,然后調(diào)用s.capitalize()函數(shù)將每個(gè)單詞的首字母大寫其他字母小寫僧界,然后在調(diào)用s.join()函數(shù)將單詞連接起來成為句子,他有兩個(gè)參數(shù),第一個(gè)參數(shù)是字符串s臭挽,第二個(gè)參數(shù)是分解成單詞時(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ī)制太高級(jí)纽帖,可以很輕松的調(diào)用代碼宠漩,不用亂七八糟寫一通確實(shí)還挺方便哈哈哈哈哈。
阿阿阿阿阿阿阿阿阿阿總結(jié)終于結(jié)束了懊直,累死爸爸了扒吁,下周繼續(xù)!睡覺了室囊,呼呼呼~