Python简易爬虫以及嵌套数据类型

来源:互联网 发布:css源码 编辑:程序博客网 时间:2024/04/30 07:09

一:起因

(0)爬虫就是网络蜘蛛,爬取指定URL的html网页的内容,所以会需要urllib2包,字符串string的操作肯定也是需要的,以及字符串匹配包re。

(1)Python的嵌套类型,一般在基础教程里面很少涉及到的;Python的更高级应用肯定会涉及的,只是个人能力有限,如今没有深入,期待不就将来接触学习一下。

(2)说起嵌套类型,这要从Java 或则 c++的嵌套类型说起,只要你处理数据,增删该查一般都会涉及到嵌套类型,原来的语言中涉及到,自然而然的想到了Python肯定也可以应用嵌套类型。

(3)下面简单的通过实例介绍一下嵌套类型,结合之前的blog,就基本上可以处理文本数据了。

二:代码实战

(1)Python字典嵌套(就是hash嵌套) 以及 list(列表)嵌套类型的示例

[python] view plaincopy在CODE上查看代码片派生到我的代码片
  1. import itertools  
  2. #encoding = utf-8  
  3. #!/user/bin/python  
  4.   
  5. print "**********test multi_dic_hash (hashtable order by key automatic)********"  
  6. data = {1: {1:'a',2:'b',3:'c'}, 2: {4:'d',5:'e',6:'f'}};  
  7. print data;  
  8. del data[2][4];  
  9. print data;  
  10. data[2][5] = 'w';  
  11. print data;  
  12.   
  13. tjudata = {"cs":{"091":32,"093":34,"092":35},"ccs":{"081":32,"083":34,"082":35},"is":{"071":32,"073":34,"072":35}};  
  14. print tjudata;  
  15. #删除  
  16. del tjudata["cs"]["091"];  
  17. print tjudata;  
  18. #更改 添加  
  19. tjudata["cs"]["091"] = 85;  
  20. tjudata["cs"]["092"] = 101;  
  21. #遍历  
  22. s_keys = tjudata.keys();  
  23. for s_key in s_keys:  
  24.     print s_key,":";  
  25.     s_data = tjudata.get(s_key);  
  26.     #print s_key,"-->",s_data;  
  27.     c_keys = s_data.keys();  
  28.     for c_key in c_keys:  
  29.         c_value = s_data.get(c_key);  
  30.         print c_key,"-->",c_value;  
  31.   
  32. print "**********test multi_list (hashtable order by key automatic)********"  
  33. #当里面的lst_one第一项字母相等时,就把第二项颜色拼接在一起。即最终实现[['A','黄绿白'],['B','黄'],['C','紫蓝']...]  
  34. lst_all = [['A','Blue'],['A','Green'],['A','Yellow'],['B','Red'],['C','Red'],['C','White']];  
  35. collector = [];  
  36. for k, lstgroup in itertools.groupby(sorted(lst_all), lambda x: x[0]):  
  37.     collector.append([k, ','.join([c[1for c in lstgroup])]);  
  38. print collector;  
  39. #删除  
  40. print lst_all;del lst_all[0][0];  
  41. print lst_all;  
  42. #更改 添加  
  43. lst = lst_all[0];  
  44. lst.insert(0,'D');  
  45. #lst_all.insert[0][0] = 'D';  
  46. lst_all[1][1] = 'RDS';  
  47. #遍历  
  48. for lst in lst_all:  
  49.     for ele in lst:  
  50.         print ele;  

(2)简单的网络爬虫

[python] view plaincopy在CODE上查看代码片派生到我的代码片
  1. #coding=utf-8  
  2. import urllib  
  3.   
  4. def getHtml(url):  
  5.     page = urllib.urlopen(url)  
  6.     html = page.read()  
  7.     return html  
  8.   
  9. html = getHtml("https://www.baidu.com/")  
  10.   
  11. 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的使用经验,也就不多说什么了。
0 0