Python 学习笔记 20150316

Windows 环境下的 Python

1. Windows 下也可以直接用 cmd 运行 Python 的 pip 和 easyinstall 等工具。推荐 easyinstall,因为有些模块用 pip 装不上。

2. Windows 下也可以使用viturlenv,Linux 下一般需要这个功能,Windows 直接上 Python 3了,暂时没用到此类功能。在部署程序到Linux服务器上时,简单的使用了virtualenv。

## 安装 virtualenv
pip install virtualenv
## 创建虚拟环境:
virtualenv -p /usr/bin/python3 py3env
## 激活虚拟环境:
source py3env/bin/activate ##执行后shell 的提示符行前多了(py3env)字样
##退出 Python 3 虚拟环境
deactivate

使用 Python抓取数据

1. requests 模块

## 安装 requests 模块:
pip install requests
## 导入 requests 模块
import requests
## 简单的使用 requests 模块
## get/post 请求
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("http://httpbin.org/get", params=payload) ## r.url = 'http://httpbin.org/get?key2=value2&key1=value1'
html = r.text
## 维持cookies和session等会话信息 
session = requests.Session()
session.post(url_1,data = payload)
session.get(url_2).text

我在使用中涉及到一个单点登陆问题,水平太菜不知道怎么解决,但是发现一个简单的 get sso key就可以登陆了。此处不表。

更多 requests 功能,可参考 Requests: HTTP for Humans

2. Beautiful Soup 模块

## 安装 Beautiful Soup 4 模块:
pip install beautifulsoup4
## 导入 bs4 模块:
from bs4 import BeautifulSoup
## 生成bs4对象:
soup = BeautifulSoup(html) ## html = requests.get(url)
## 解析页面:
soup.find('a',id="regular") ## 寻找 id 为 regular 的 a 标签
soup.find('td',text='你好') ## 寻找内容文本为 '你好' 的 td 标签
soup.find('td',text='姓名').find_next("td").get_text() ## 寻找内容文本为 '你好' 的 td 标签的下一个 td 标签的内容文本。

上面这种查询可能有些费解,想象一个多行2列的表格:

-----------
姓名 | 年龄
-----------
张三 | 25
-----------
李四 | 30
-----------
王五 | 26
-----------

李四的年龄即为:

soup.find('td',text='李四').find_next("td").get_text()

更多bs4功能,可参考 Beautiful Soup 4.2.0 文档

3. time 模块

time 模块是 Python 内置的模块,无需安装,主要涉及时间格式的转换。

## 导入 time 模块:
import time
## 拿到一个字符串类型的日期表达:
time_str = 'Thu, 18 Dec 2014 08:40:19 +0000'
## 转换成时间戳:
## 先用strptime将字符串转换成 Python 的 time.struct_time 数据结构
## 再使用 mktime 将 time.struct_time 数据结构生成时间戳。、
time_timestamp = time.mktime(time.strptime(time_str,"%a, %d %b %Y %H:%M:%S %z"))

time.strptime 还有个反向的函数 time.strftime,能根据 time.struct_time 数据结构生成文本格式的时间。所以如果要将 time_str 重新格式化,可以这样使用:

new_time_str = time.strftime("%Y-%m-%d %H:%M:%S",time.strptime(time_str,'%a, %d %b %Y %H:%M:%S %z'))

更多时间模块,可参考 16.3. time — Time access and conversions

4. PyMongo 模块

PyMongo 是 Python 操作 MongoDB 数据库的模块。

## 安装 PyMongo 模块:
pip install PyMongo
## 导入 PyMongo 模块:
from pymongo import MongoClient
## 连接数据库:
client = MongoClient()
db = client.sample_db ## 类似 MongoDB 客户端的 use sample_db
sample_collection = db.sample_collection ## 使用 sample_collection 集合
## 操作数据集合:
sample_collection.find_one({'key':'value'}) ## MongoDB 客户端 对应的为 db.sample_collection.findOne({'key':'value'})
sample_collection.insert({'key':'value'}) ## 与 MongoDB 客户端相同
sample_collection.update({'key':'value'},{'$set':{'new_key':'new_value'}}) ## 与 MongoDB 客户端相同

5. 其他模块

models = requests.get(url,params = payload)
import json
model_list = json.loads(models.text) ## 将字符串转换成 json 数据结构,根据字符串不同自动转换为 dict 或 list
from hashlib import md5
fingerprint = md5(models.text.encode("utf-8")).hexdigest() ## 获取字符串对象的 md5 摘要,需要先编码

发表评论

电子邮件地址不会被公开。 必填项已用*标注