? ? ? ? ? 看到大大的代碼,發(fā)現(xiàn)自己的關(guān)注點(diǎn)出現(xiàn)了偏差。其實(shí)主要的內(nèi)容和涉及的步驟有兩方面
1、解析多個(gè)網(wǎng)站的內(nèi)容,并存放內(nèi)容;
2、解析同一網(wǎng)站的內(nèi)容,并把其中鏈接到的網(wǎng)址內(nèi)容一并解析出來并存好。
? ? ? ? 自己的關(guān)注點(diǎn)放在了第一個(gè)上,預(yù)建立多個(gè)網(wǎng)站并存于列表中,用for循環(huán)解析每個(gè)網(wǎng)站的內(nèi)容并存于字典中(為了實(shí)現(xiàn)網(wǎng)站和內(nèi)容的對應(yīng)),把字典序列化到文件中,然后再提取文件內(nèi)容。
? ? ? ? 而大大的代碼側(cè)重于2,把每個(gè)網(wǎng)站涉及的鏈接部分重新訪問并解析至文件中,如果鏈接涉及的網(wǎng)頁內(nèi)容還有網(wǎng)址還會繼續(xù)解析,做到對同一網(wǎng)頁的持續(xù)解析。這個(gè)是自己沒有想到、做到、不足的地方。

? ? ? 以上是大大的代碼:
1、導(dǎo)入re、urllib、urllib2、pickle模塊;解析前面作業(yè)中的網(wǎng)址并存儲在指定文件中;
2、定義一個(gè)變量,初始化為''——空字符的字符串變量;定義下載內(nèi)容的空字典downs;
3、定義函數(shù),用于訪問遇到的鏈接并請求訪問、打開和讀取內(nèi)容;將讀取的內(nèi)容返回給函數(shù);
4、打開指定的解析文件,按行讀取文件內(nèi)容為列表并對內(nèi)容格式化;在最后對正則表達(dá)替換的內(nèi)容利用split分離換行符"\n";
5、for循環(huán)中根據(jù)文件內(nèi)容進(jìn)行抽取合法鏈接并調(diào)用所定義的函數(shù),訪問鏈接讀取內(nèi)容且存儲到相應(yīng)網(wǎng)址的字典中;
6、將抽取的內(nèi)容序列化到文件中;
7、抽取文件中的內(nèi)容(反序列化)到變量。
? ? ? ? 其中使用了urllib2模塊,在每天的資料查閱中大概看了下,沒留意其用法也就沒有想到任務(wù)中會用到。在資料的學(xué)習(xí)中任然要仔細(xì)思考,提高重視程度。
? ? ? ? 定義函數(shù)的念頭也只是一閃而過并未仔細(xì)思考,其實(shí)只要可以重復(fù)利用的部分都可以利用函數(shù)來返回值。在以后的學(xué)習(xí)和編碼中多思考哪些部分可以用函數(shù)去表示,并多練習(xí)。
? ? ? ? 其中urllib2.Request()表示對傳遞的url參數(shù)進(jìn)行實(shí)例化——Request是一個(gè)類;urllib2.urlopen()表示對實(shí)例化的url對象訪問服務(wù)器并打開這個(gè)網(wǎng)頁;最后.read()對打開的對象進(jìn)行讀取。
? ? ? ? 可以延伸想到的是,對同一個(gè)網(wǎng)頁有很多深度鏈接的網(wǎng)址時(shí),一直解析下去就是爬蟲的原理,先解析門戶網(wǎng)站的內(nèi)容,然后挑出鏈接,繼續(xù)解析,很復(fù)雜,可以想到的是定義解析的函數(shù),利用while循環(huán)一直進(jìn)行下去。