? ? ? ? ? 看到大大的代碼,發(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)容一并解析出來(lá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)容的對(duì)應(yīng))疾忍,把字典序列化到文件中,然后再提取文件內(nèi)容床三。
? ? ? ? 而大大的代碼側(cè)重于2一罩,把每個(gè)網(wǎng)站涉及的鏈接部分重新訪問(wèn)并解析至文件中,如果鏈接涉及的網(wǎng)頁(yè)內(nèi)容還有網(wǎng)址還會(huì)繼續(xù)解析撇簿,做到對(duì)同一網(wǎng)頁(yè)的持續(xù)解析聂渊。這個(gè)是自己沒(méi)有想到、做到四瘫、不足的地方歧沪。
? ? ? 以上是大大的代碼:
1、導(dǎo)入re莲组、urllib诊胞、urllib2、pickle模塊锹杈;解析前面作業(yè)中的網(wǎng)址并存儲(chǔ)在指定文件中撵孤;
2、定義一個(gè)變量竭望,初始化為''——空字符的字符串變量邪码;定義下載內(nèi)容的空字典downs;
3咬清、定義函數(shù)闭专,用于訪問(wèn)遇到的鏈接并請(qǐng)求訪問(wèn)奴潘、打開(kāi)和讀取內(nèi)容;將讀取的內(nèi)容返回給函數(shù)影钉;
4画髓、打開(kāi)指定的解析文件,按行讀取文件內(nèi)容為列表并對(duì)內(nèi)容格式化平委;在最后對(duì)正則表達(dá)替換的內(nèi)容利用split分離換行符"\n"奈虾;
5、for循環(huán)中根據(jù)文件內(nèi)容進(jìn)行抽取合法鏈接并調(diào)用所定義的函數(shù)廉赔,訪問(wèn)鏈接讀取內(nèi)容且存儲(chǔ)到相應(yīng)網(wǎng)址的字典中肉微;
6、將抽取的內(nèi)容序列化到文件中蜡塌;
7碉纳、抽取文件中的內(nèi)容(反序列化)到變量。
? ? ? ? 其中使用了urllib2模塊馏艾,在每天的資料查閱中大概看了下村象,沒(méi)留意其用法也就沒(méi)有想到任務(wù)中會(huì)用到。在資料的學(xué)習(xí)中任然要仔細(xì)思考攒至,提高重視程度。
? ? ? ? 定義函數(shù)的念頭也只是一閃而過(guò)并未仔細(xì)思考躁劣,其實(shí)只要可以重復(fù)利用的部分都可以利用函數(shù)來(lái)返回值迫吐。在以后的學(xué)習(xí)和編碼中多思考哪些部分可以用函數(shù)去表示,并多練習(xí)账忘。
? ? ? ? 其中urllib2.Request()表示對(duì)傳遞的url參數(shù)進(jìn)行實(shí)例化——Request是一個(gè)類志膀;urllib2.urlopen()表示對(duì)實(shí)例化的url對(duì)象訪問(wèn)服務(wù)器并打開(kāi)這個(gè)網(wǎng)頁(yè);最后.read()對(duì)打開(kāi)的對(duì)象進(jìn)行讀取鳖擒。
? ? ? ? 可以延伸想到的是溉浙,對(duì)同一個(gè)網(wǎng)頁(yè)有很多深度鏈接的網(wǎng)址時(shí),一直解析下去就是爬蟲(chóng)的原理蒋荚,先解析門戶網(wǎng)站的內(nèi)容戳稽,然后挑出鏈接,繼續(xù)解析期升,很復(fù)雜惊奇,可以想到的是定義解析的函數(shù),利用while循環(huán)一直進(jìn)行下去播赁。