標籤:python嵌套資料類型 簡易爬蟲
一:起因
(0)爬蟲就是網路蜘蛛,爬取指定URL的html網頁的內容,所以會需要urllib2包,字串string的操作肯定也是需要的,以及字串匹配包re。
(1)Python的巢狀型別,一般在基礎教程裡面很少涉及到的;Python的更進階應用程式肯定會涉及的,只是個人能力有限,如今沒有深入,期待不就將來接觸學習一下。
(2)說起巢狀型別,這要從Java 或則 c++的巢狀型別說起,只要你處理資料,增刪該查一般都會涉及到巢狀型別,原來的語言中涉及到,自然而然的想到了Python肯定也可以應用巢狀型別。
(3)下面簡單的通過執行個體介紹一下巢狀型別,結合之前的blog,就基本上可以處理文本資料了。
二:代碼實戰
(1)Python字典嵌套(就是hash嵌套) 以及 list(列表)巢狀型別的樣本
import itertools#encoding = utf-8#!/user/bin/pythonprint "**********test multi_dic_hash (hashtable order by key automatic)********"data = {1: {1:'a',2:'b',3:'c'}, 2: {4:'d',5:'e',6:'f'}};print data;del data[2][4];print data;data[2][5] = 'w';print data;tjudata = {"cs":{"091":32,"093":34,"092":35},"ccs":{"081":32,"083":34,"082":35},"is":{"071":32,"073":34,"072":35}};print tjudata;#刪除del tjudata["cs"]["091"];print tjudata;#更改 添加tjudata["cs"]["091"] = 85;tjudata["cs"]["092"] = 101;#遍曆s_keys = tjudata.keys();for s_key in s_keys:print s_key,":";s_data = tjudata.get(s_key);#print s_key,"-->",s_data;c_keys = s_data.keys();for c_key in c_keys:c_value = s_data.get(c_key);print c_key,"-->",c_value;print "**********test multi_list (hashtable order by key automatic)********"#當裡面的lst_one第一項字母相等時,就把第二項顏色拼接在一起。即最終實現[['A','黃綠白'],['B','黃'],['C','紫藍']...]lst_all = [['A','Blue'],['A','Green'],['A','Yellow'],['B','Red'],['C','Red'],['C','White']];collector = [];for k, lstgroup in itertools.groupby(sorted(lst_all), lambda x: x[0]):collector.append([k, ','.join([c[1] for c in lstgroup])]);print collector;#刪除print lst_all;del lst_all[0][0];print lst_all;#更改 添加lst = lst_all[0];lst.insert(0,'D');#lst_all.insert[0][0] = 'D';lst_all[1][1] = 'RDS';#遍曆for lst in lst_all:for ele in lst:print ele;
(2)簡單的網路爬蟲
#coding=utf-8import urllibdef getHtml(url): page = urllib.urlopen(url) html = page.read() return htmlhtml = getHtml("https://www.baidu.com/")print html
(3)urllib*簡介 轉載自 http://www.cnblogs.com/yuxc/archive/2011/08/01/2123995.html
1). urllib:
官網的一句話描述是:通過url開啟任意資源。從官網的簡介來看,這個模組最初是類比檔案模組來實現的,只是將本地的檔案路徑,改為遠端互連網url。常用操作有:
urlopen(url, [,data])——根據url開啟一個網頁,根據參數區分post或者get
urlretrieve()——將指定url的網頁內容複寫一份到指定的本地檔案
quote()——將url中的特殊字元或漢字encode成指定編碼
unquote()——將url中的url編碼解碼
詳情參看:http://docs.python.org/2/library/urllib.html
2). urllib2:
官網的一句話描述很笼統:開啟url的拓展庫。主要是說,對url開啟的一些更複雜的操作,如操作相關的一些認證、重新導向和cookie等等。這樣來看,更印證了urllib模組是類比檔案操作實現的思路。因為這些“複雜操作”是開啟url專屬的,檔案操作確實不存在的。urllib2中沒有quote和unquote的操作,這個只在urllib中有;同時也沒有了urlretrieve。常見的操作:
urlopen(url,[,data],[,timeout])——增加了請求響應的逾時時間,在urllib中需要藉助socket模組來實現,這裡更方便了,登場率也就更高了
Request.* ——添加了對Request的支援;也可以方便的操作Header裡面的東西了
詳情參看:http://docs.python.org/2/library/urllib2.html
3). urllib3:
首先,這個不是一個標準庫,是一個拓展庫。該模組的介紹重點說它的作用:提供了urllib和urllib2中沒有的串連池和檔案的post功能。由於不是標準庫,因此,需要單獨下載和安裝,地址參看:https://pypi.python.org/pypi/urllib3。雖然他是針對python2.*版本中的urllib和urllib2的遺漏功能啟動的項目,但現在也同樣支援python3.3中的開發。由於個人尚無python3的使用經驗,也就不多說什麼了。
Python簡易爬蟲以及嵌套資料類型