python |--数据类型 |--整型,长整型,浮点型,字符串,布尔型,空值 |--浮点型 当有一个为浮点,结果必为浮点 |--字符串 与Java不同,‘’和“”在python中是一个意思,哪个被用过了就用另一个 当字符串中还有标点符号时,可以在前面加转义。 也可以在字符串前面加r即r'xxx' 当有很多符号,且多行时可以这样r''' xxx,xxxx!|||sss ''',不加r的话里面都要加,ur的话字符串可以有中文 |--注释 在前面加#即可 |--数组 |--list |--访问索引 依据下标如:L[1],下标由0开始,当为-1时表示最后一个,-2位倒数第二个,以此类推 |--添加 L.append()表示在数组最后一位加数据 L.insert(n)表示在数组固定下标插入,后面的元素自当往后移动下标 |--删除pop L.pop()删除最后一个 L.pop(n)删除指定下标数组元素 |--tuple |--与list区别 list是动态的括号用中括号【】,tuple是静态的无法更改括号用(),一旦设定好久无法改 |--实现假“动态” 在tuple中加入list数组如L=('A','B',['X','Y']) 取出来只需A=L(2) 更改时只需A(0)=xxx |--条件判断和循环 |--if else 和elif if后面不用加(),但是条件结束后一定要加: python在同一排表示一个代码语句块,不需要花括号{ } 因此写完条件后,当要写循环执行体时要换行然后空四格(规定) |--for 类似Java中的foreach语句 如 for 变量 in 数组: |--dict和set |--dict |--含义 类比java中的哈希表 key-value |--用法 d{ xx:xx, yy:yy } |--增删查改 查: d.get(xx) 括号内看是什么值 若xx没有则返回none or d[xx] 若xx不存在则报错 因此要先判断是否存在 if xx in d ........ 增:d[xx]=xx |--遍历for for key in d prinf key prinf 后面输出值+是用于连接字符串用 ,加上变量用“,”就行了 |--set |--含义 set 持有一系列元素,这一点和 list 很像,但是set的元素没有重复,而且是无序的, 与dict差不多区别在于没有value |--用法 s=set([(xx,yy),(xx1,yy1),(xx2,yy2)]) 打印时for x in s print x[0],x[1] x随便取,在【】中的每一个括号()代表一个元素 一个元素可以有1个或者多个值,所有会有下标打印 |--加 s.add(5),若set中存在则没有变化 |--删 s.remove(2),若set中不存在则报错 需要判定在写remove for if语句别忘记加:!!! |--函数 |--查询 可以直接从Python的官方网站查看文档: http://docs.python.org/2/library/functions.html#abs python中没有x++ |--切片 |--用处 可以用于对list ,打印不需要用循环 只需要在里面加: |--实例 L[:] 打印所有 L[:3] 若从下标0开始 则可以省略 到索引3不包括3 类似于列表函数range(x) for i range(10) 打印i0-9 |--倒序切片 记住倒数第一个元素的索引是0。倒序切片包含起始索引,不包含结束索引。 L[-2:]表示倒数第一个和第二个 |--python中如何将两个list合并成一个list,不用for语句 1, add 2, 用list的extend方法,L1.extend(L2),该方法将参数L2的全部元素添加到L1的尾部,例如: 3, 用切片(slice)操作,L1[len(L1):len(L1)] = L2和上面的方法等价, |--但切片方法用起来更灵活,可以插入到头部,或其他任意部位,也可以加到中间. |--注意: 集合是指包含一组元素的数据结构,我们已经介绍的包括: 1. 有序集合:list,tuple,str和unicode; 2. 无序集合:set 3. 无序集合并且具有 key-value 对:dict |--索引迭代 |--含义:迭代永远是取出元素本身,而非元素的索引。想在 for 循环中拿到索引,怎么办?方法是使用 enumerate() 函数: 在enumerate下的list中每一个元素都隐藏着一个tuple 即值前有一个索引 |--实例 for index, name in enumerate(L): print index, '-', name |--拓展 zip()函数可以把两个 list 变成一个 list:>>> zip([10, 20, 30], ['A', 'B', 'C']) [(10, 'A'), (20, 'B'), (30, 'C')] |--dict 的value迭代 |--dict 对象有一个 values() 方法,这个方法把dict转换成一个包含所有value的list,这样,我们迭代的就是 dict的每一个 value: d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } print d.values() # [85, 95, 59] for v in d.values(): print v |--类同 还有一个 itervalues() 方法,用 itervalues() 方法替代 values() 方法,迭代效果完全一样: |--不同 1. values() 方法实际上把一个 dict 转换成了包含 value 的list。 2. 但是 itervalues() 方法不会转换,它会在迭代过程中依次从 dict 中取出 value,所以 itervalues() 方法比 values() 方法节省了生成 list 所需的内存。 3. 打印 itervalues() 发现它返回一个 <dictionary-valueiterator> 对象,这说明在Python中,for 循环可作用的迭代对象远不止 list,tuple,str,unicode,dict等,任何可迭代对象都可以作用于for循环 ,而内部如何迭代我们通常并不用关心。 如果一个对象说自己可迭代,那我们就直接用 for 循环去迭代它,可见,迭代是一种抽象的数据操作,它不对迭代对象内部的数据有任何要求。 |--求容易 长度 x=[xx,yy,zz] len(x) |--dict 的items() 首先,我们看看 dict 对象的 items() 方法返回的值: >>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } >>> print d.items() [('Lisa', 85), ('Adam', 95), ('Bart', 59)] 可以看到,items() 方法把dict对象转换成了包含tuple的list,我们对这个list进行迭代,可以同时获得key和value >>> for key, value in d.items(): print key, ':', value Lisa : 85 Adam : 95 Bart : 59 |--列表 列表生成式的 for 循环后面还可以加上 if 判断。例如: >>> [x * x for x in range(1, 11)] [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] 如果我们只想要偶数的平方,不改动 range()的情况下,可以加上 if 来筛选: >>> [x * x for x in range(1, 11) if x % 2 == 0] //在修改range的情况下是这样的 [x * x for x in range(2, 11,2) ] [4, 16, 36, 64, 100] |--列表实例 L = [] for m in 'ABC': for n in '123': L.append(m + n) 列表: >>> [m + n for m in 'ABC' for n in '123'] ['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3'] |--爬虫 |--组成 URL管理器 |-实现方式 1.python本内存 set()适用于较小存储 2.关系数据库mysql 3.缓存数据库 set 网页下载器 |--种类 1.urllib2 python官方基础模块 |--urllib2的三种使用方法 |--1最简洁方法: url='http://www.baidu.com' print 'url管理器 第一种方法:' response1=urllib2.urlopen(url) print response1.getcode() print len(response1.read()) |--2可以添加data、http header伪装的方法 print 'url管理器 第二种方法:' request=urllib2.Request(url) request.add_header("user-agent", "Mozilla/5.0")//添加数据的时候为 request.add_data('x','y') response2=urllib2.urlopen(request) print response2.getcode() print len(response2.read()) |--3添加特殊情景的处理器 四种:HTTPCookieProcessor 、ProxyHandler、HTTPHandler、HTTPRedirectHandler print 'url管理器 第三种方法:' cj=cookielib.CookieJar() opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) urllib2.install_opener(opener) response3=urllib2.urlopen(url) print response3.getcode() print cj print response3.read() 2.requests 第三方包 网页解析器 |--常见四种解析器 :正则表达式(模糊匹配)、html.parser、Beautiful Soup(主要用这个)、lxml (后三个为结构化解析) |--Beautiful Soup4 1.创建对象 from bs4 import BeautifulSoup #根据HTML网页字符串创建BeautifulSoup对象 soup =BeautifulSoup( html_doc, #HTML文档的字符串 'html.parser' , #HTML的解析器 from_encoding='utf-8' #HTML的文档编码 ) |--搜索方法 |--1.find_all(name,attrs,string) #查找所有标签为div,class为abc,文字为Python的节点,因为class为关键字所有要变成classs_ soup.find_all('div',class_='abc',string='Python') |--2.find |--访问方法(获取节点信息) |--1node.name |--2node['href'] #注意没有点 |--3node.get_text() |--用法 1首先可以先快速获取网页代码来实验 进入文档获取html_doc 2.创建对象soup 3.用find_all或者find来获取所需要的标签、属性、文本内容 4.print 出三个访问方法(上面有) |--代码实例 from bs4 import BeautifulSoup import re html_doc = """ 获取的网页代码内容省略。。。。。 """ soup=BeautifulSoup(html_doc,'html.parser',from_encoding='utf-8') print '获取所有链接' links=soup.find_all('a') for link in links: print link.name,link['href'],link.get_text() print '获取href="http://example.com/lacie"链接' link_node=soup.find('a', href="http://example.com/lacie") print link_node.name,link_node['href'],link_node.get_text() print '正则匹配' link_node=soup.find('a', href=re.compile(r"ill")) print link_node.name,link_node['href'],link_node.get_text() print '获取p段落文字' p_node=soup.find('p', class_="title") print p_node.name,p_node.get_text() 爬虫项目: 入口页: https://baike.baidu.com/item/Python/407313 URL格式: /item/%s+%d+.htm 数据格式: 标题: <dd class="lemmaWgt-lemmaTitle-title"> <h1>Python</h1> </dd> 简介: <div class="lemma-summary" label-module="lemmaSummary"> </div> <div class="para" label-module="para">如果您需要安装, 您不妨下载最近稳定的版本。 就是那个以没有被标记作为alpha或Beta发行的最高的版本。目前最稳定的版本是Python3.0以上<sup class="sup--normal" data-sup="2" data-ctrmap=":2,"> [2]</sup><a class="sup-anchor" name="ref_[2]_21087"> </a> </div> |--if __name__="__main__": 添加if __name__ == "__main__" 我们看到const.py中的main函数也被运行了,实际上我们不希望它被运行,因为const.py提供的main函数只是为了测试常量定义。这时if __name__ == '__main__'派上了用场,我们把const.py改一下,添加if __name__ == "__main__": ———————————————— 版权声明:本文为CSDN博主「anshuai_aw1」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/anshuai_aw1/article/details/82344884