? ? ? ? ? 看到大大的代碼,發現自己的關注點出現了偏差。其實主要的內容和涉及的步驟有兩方面
1、解析多個網站的內容,并存放內容;
2、解析同一網站的內容,并把其中鏈接到的網址內容一并解析出來并存好。
? ? ? ? 自己的關注點放在了第一個上,預建立多個網站并存于列表中,用for循環解析每個網站的內容并存于字典中(為了實現網站和內容的對應),把字典序列化到文件中,然后再提取文件內容。
? ? ? ? 而大大的代碼側重于2,把每個網站涉及的鏈接部分重新訪問并解析至文件中,如果鏈接涉及的網頁內容還有網址還會繼續解析,做到對同一網頁的持續解析。這個是自己沒有想到、做到、不足的地方。
? ? ? 以上是大大的代碼:
1、導入re、urllib、urllib2、pickle模塊;解析前面作業中的網址并存儲在指定文件中;
2、定義一個變量,初始化為''——空字符的字符串變量;定義下載內容的空字典downs;
3、定義函數,用于訪問遇到的鏈接并請求訪問、打開和讀取內容;將讀取的內容返回給函數;
4、打開指定的解析文件,按行讀取文件內容為列表并對內容格式化;在最后對正則表達替換的內容利用split分離換行符"\n";
5、for循環中根據文件內容進行抽取合法鏈接并調用所定義的函數,訪問鏈接讀取內容且存儲到相應網址的字典中;
6、將抽取的內容序列化到文件中;
7、抽取文件中的內容(反序列化)到變量。
? ? ? ? 其中使用了urllib2模塊,在每天的資料查閱中大概看了下,沒留意其用法也就沒有想到任務中會用到。在資料的學習中任然要仔細思考,提高重視程度。
? ? ? ? 定義函數的念頭也只是一閃而過并未仔細思考,其實只要可以重復利用的部分都可以利用函數來返回值。在以后的學習和編碼中多思考哪些部分可以用函數去表示,并多練習。
? ? ? ? 其中urllib2.Request()表示對傳遞的url參數進行實例化——Request是一個類;urllib2.urlopen()表示對實例化的url對象訪問服務器并打開這個網頁;最后.read()對打開的對象進行讀取。
? ? ? ? 可以延伸想到的是,對同一個網頁有很多深度鏈接的網址時,一直解析下去就是爬蟲的原理,先解析門戶網站的內容,然后挑出鏈接,繼續解析,很復雜,可以想到的是定義解析的函數,利用while循環一直進行下去。