安装virtualenv
python用pip安装的包和类库都是直接安装在全局环境的,这做法就跟java把你用过的所有jar包都放在系统path一样,长期工作下去累计的类库越来越多,交叉依赖,版本冲突啥的随之而来。virtualenv
就是为了解决这个问题的,在每个新项目都使用一个不同的虚拟环境,项目中所有的包都安装在这个虚拟环境之下,和全局无关,使用起来库结构简洁清爽。
sudo pip install virtualenv
新建安放虚拟文件的目录pv,在目录里面新建python虚拟环境,环境名为pv
mkdir pv
cd pv
virtualenv --no-site-packages pv
进入到pv虚拟环境
source pv/bin/activate
退出
deactivate
安装依赖
导出:
pip freeze > requirements.txt # 导出项目依赖的包到requirements.txt文件
批量安装:
pip install -r requirements.txt # 从依赖文件,批量安装包.
做接口测试
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
url = "http://localhost:8080/ESB/INFORMANAGE/INFORMANAGESERVICE/inforrelease"
header={
'content-type':'application/json; charset=utf-8',
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36'
}
param= {
"msghead": {
"authcode": "123",
"devno": "123",
"reqsn": "123",
"servicename": "inforrelease",
"signData": "123",
"tranchannel": "123",
"trandatetime": "1923",
"version": "v1.0"
},
"msgreq": {
"content": "123",
"endTime": "123",
"hasRead": "123",
"ids": ["123"],
"imglist": ["123"],
"shouldPay": "123",
"startTime": "123",
"title": "123",
"type": "123",
"userId": "123"
}
}
s = requests.post(url,json=param,headers = header)
print s.text.encode('utf-8')
做爬虫
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Created by tianjun on 16/2/21
import requests
from bs4 import BeautifulSoup
import blog
begin_url = "http://www.omgif.net/"
headers = {
"Referer": "www.omgif.net",
'Connection':'keep-alive',
'Host':'www.omgif.net',
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36"
}
def parse(url):
s = requests.get(url, timeout=5,headers=headers)
bs = BeautifulSoup(s.text, "lxml")
for contain in bs.find_all(class_="post-container"):
b = blog.blog()
b.type="2"
b.site = "omgif"
b.content_id = contain.contents[1]["id"]
if contain.h2 is not None:
b.title = contain.h2.a.string.encode('utf-8')
b.detail = contain.h2.a["href"]
imgContent = contain.img
b.img = imgContent["src"]
b.mp4 = imgContent["data-gif"]
if not b.hasContent():
b.save()
print "新增一条记录",b.content_id
else:
break
return bs.find(class_="archive-nav").a['href']
def init():
url = begin_url;
for i in range(0, 10):
url = parse(url)
print url
if __name__ == '__main__':
init()
import urllib
import urllib2
cookies = "lzstat_uv=36646143701674066401|3239393; JSESSIONID=AA3A6FEE4AF7E7878218583316BBC9B4; l=Ap6eJnEdnxIiW7Ybwfnsex2lbj7gDmLb; visitState=pc; CNZZDATA30063739=cnzz_eid%3D2009472116-1453958417-%26ntime%3D1453982370; CNZZDATA30073553=cnzz_eid%3D51683217-1453956930-%26ntime%3D1453981617; lzstat_ss=978823405_1_1454014976_3239393; MIIEE_JTOKEN=02978316089138388698541186051443227222067695111036";
url = "http://www.miiee.com/interface/dresslist.htm?_=04511898399796337";
values = {'n' : '1',
'p' : '1',
'jtoken' : '02978316089138388698541186051443227222067695111036' }
headers = { 'Cookie' : cookies }
data = urllib.urlencode(values)
req = urllib2.Request(url, data,headers)
response = urllib2.urlopen(req)
the_page = response.read();
print the_page
print response.info()
print response.geturl()
一些技巧
利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。
输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']:
def normalize(name):
return name[0].upper() +name[1:].lower()
L1 = ['adam', 'LISA', 'barT']
L2 = list(map(normalize, L1))
print(L2)
from functools import reduce
def prod(L):
return reduce(lambda x,y: x*y,L)
print('3 * 5 * 7 * 9 =', prod([3, 5, 7, 9]))
常用类库
beautifulsoup4
http://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/pyquery
https://github.com/gawel/pyqueryrequests
http://docs.python-requests.org/en/master/MySQL-python
Scrapy
http://doc.scrapy.orgFlask
http://docs.jinkan.org/docs/flask/,SQLAlchemy