- sax边读边解析,效率高;dom一次都读进来
- pass:什么也不做,一般用于占位语句
- def:定义一个函数
简单爬虫
import requests
import xml.etree.ElementTree as ET
from xml.parsers.expat import ParserCreate
class DefaultSaxHandler(object):
def __init(self,provinces):
self.provinces=provinces
def get_provinces(url):
content=requests.get(url).content.decode('gb2312')
start=content.find('<map name=\"map_86 id=\"map_86\">')
end=content.find('<\map>')
content=content[start:end+len('</map>')].strip()
print(content)
provinces=[]
handler=DefaultSaxHandler(provinces)
parser=ParserCreate()
parser.StartElementHandler=handler.start_element
parser.EndElementHandler=handler.end_element
parser.CharacterDataHandlerhandler.char_data
parser.Parse(content)
return provinces
def start_element(self,name,attrs):
if name!='map':
name=attrs['title']
number=attrs['href']
self.provinces.append((name,number))
def end_element(self,name):
pass
def char_data(self,text):
pass
provinces=get_provinces('http://www.ip138.com/post')
print(provinces)
Python简介
1.优点
- 简单,容易学习
- 免费开源
- 高级语言,细节隐藏
- 解释性,可移植。一次编写,到处运行
- 面向对象
- 可扩展。可嵌入c/c++,或者使用c/c++提高性能
- 扩展库
2.缺点
- 慢!
- shell脚本不友好
doc命令
- pip install package(包名)
- pip –verbose install package(若安装包失败可以打印出失败原因)
- pip list(列出已安装的包)
- pip install package(包名) -i –trusted-host site:改变安装源,从国内的镜像中安装。eg.pip install -i –trusted-host http://pypi.douban.com/simple/ pandas
文件读写:文本/二进制
文本:行读写
二进制:偏移量+大小-
格式化字符串:print(‘%s,%d’%(‘aaa’,100))
常用关键字
常量
- True
- False
- None(相当于null)
对象和容器
- class
- import
- from
- del:从对象里删除一个元素
判断
- if
- elif
- else
- is
- in:判断对象在不在容器里
- assert:
循环 - for
- while
- continue:跳出当前循环
- break
- pass:什么都不做
- 哪种情况下使用:若无pass则报错,用pass做填充
class Empty(object):
#pass
def fun():
return 100;
print(fun())
- 哪种情况下使用:若无pass则报错,用pass做填充
异常
- raise
- try
- except
- finally
- as
常用运算符
算术运算符
- +-*/
- %
- **:指数运算
- //:除法之后只取整数部分
比较运算符
- >,>=
- <,<=
- ==
- !=
逻辑运算
- and
- or
- not
位运算 :无异或 可用not(y1==y2)来表示
- >>右移一位除2
- <<左移一位乘2
- &
- |
- ^
print(0b1101|0b0101)#0b1101 13
print(0b1101&0b0101)#0b0101 5
print(0b1101^0b0101)#0b1000 8
def pow2(n):#n是不是2的指数
return (n&(n-1))==0
print(pow2(16))
print(pow2(32))
print(pow2(33))
基本语法
缩进
try:
x=100
y=200#与上行不对齐
except IndentationError:
print('IndentationError')-
注释:
- #:单行注释
- ”’:多行注释
- \n:换行
- (一行写不完,分两行写但仍实际是一行):
str1='abc'\
'def'
print(str)
print('hello\nworld')
str2='''hello world'''
print str2
print('hello world')#出错
- 单双引号:单引号相当于双引号
print('abc')
print("abc")
print('abc"123"def')'''单引号中有双引号不用转义,双引号中有单引号不用转义,单引号中有单引号需要转义,双引号中有双引号需要转义'''
print("abc'123'def")
print('abc\'123\'def')
print("abc\"123\"def")
- python3默认utf-8支持,Python2需声明
若打开错误则在开头声明
# -*- coding:utf-8 -*-
或#coding:utf-8
Python2.x和3.x的区别
- print函数:3.x一定要加()
- Unicode:3.x默认使用unicode编码
- 除法运算:3.x整相除也能得到浮点数结果
- 异常:3.x只能抛出继承自BaseException的异常
- xrange:3.x取消xrange(2.7中为种子生成器),range和xrange一样为实现为惰性求值(全生产放到list中,再从list中取值)
- 二/八进制:3.x必须强制写成0b1011和0o7236。
- 不等式:3.x取消了<>,只有!=
- ‘’(正则表达式中):3.x中必须使用repr函数
- 多个模块改名:Queue->queue,repr->reprlib
- 数据类型
- 3.x取消了long,统一为int
- 新增bytes类型,并可与string相互转换
- dict的keys/items/values方法返回迭代器,iterkeys函数被废弃,has_key被in取代
x=range(5)
print(type(x))#3.x中输出range类型,2.x中输出list类型
print((1024).to_bytes(2,byteorder='big'))#2个字节,高字节在左边
print((1024).to_bytes(4,byteorder='little'))#4个字节,高字节在右边
print((-1024).to_bytes(2,byteorder='big',signed=True))#负数
print((-1024).to_bytes(4,byteorder='little',signed=True))
print('%x'%(3124))
print('%d'%(0x0c34))