1.traceback 模块, 打印异常信息
- 使用前必须先引入traceback模块
import traceback
try:
print(str(i) +"\t"+ resStr)
time.sleep(0.1)
except :
traceback.print_exc()#print_exc()则直接给打印出来
traceback.format_exc()#format_exc()返回字符串
2.OS模块, 文件/目录方法
- os 模块使用前要先导入
import os
sas=os.getcwd() #返回当前工作目录
print(sas)
3.Requests模块
- HTTP请求类型
#get类型
r = requests.get('https://github.com/timeline.json')
#post类型
r = requests.post("http://m.ctrip.com/post")
#put类型
r = requests.put("http://m.ctrip.com/put")
#delete类型
r = requests.delete("http://m.ctrip.com/delete")
#head类型
r = requests.head("http://m.ctrip.com/head")
#options类型
r = requests.options("http://m.ctrip.com/get")
- 获取响应内容
print r.content #以字节的方式去显示,中文显示为字符
print r.text #以文本的方式去显示
- 传递参数
# 发送无参数的get请求
baiDu_response = requests.get('http://www.baidu.com')
# 发送无参数的get请求 设置超时时间 timeout 单位秒
baiDu_response = requests.get('http://www.baidu.com', timeout=1)
# 查看发送请求的url地址
print('无参数的get请求地址为: ' + baiDu_response.url)
# 查看当前返回状态码
# 若状态码为200 等同于 baiDu_response.status_code == requests.codes.ok 返回为True
print('返回的状态码为: '+str(baiDu_response.status_code))
# 查看当前返回内容编码
print('返回内容编码格式为:' + baiDu_response.encoding)
# 查看当前返回内容 text返回的是字符串
print('Text返回的数据内容为:' + baiDu_response.text)
# 查看当前返回内容 content返回的是字节流
# print('Content返回的数据内容为:' + baiDu_response.content)
# 若返回内容为json格式 可用如下语句
# print('返回的Json数据为:' + baiDu_response.json())
# 获取服务器返回的原始数据 增加stream=True
# data = requests.get('https://api.github.com/events', stream=True)
# print(data.raw.read())
# 发送带参数(字典形式)的get请求
sendDictParams = {'key1': 'value1', 'key2': 'value2'}
baiDu_dictParams_response = requests.get('http://www.baidu.com', params=sendDictParams)
# 查看发送请求的url地址
print('普通参数的get请求地址为: ' + baiDu_dictParams_response.url)
# 发送list格式参数的get请求
sendListParams = {'key1': 'value1', 'key2': ['value2', 'value3']}
baiDu_listParams_response = requests.get('http://www.baidu.com', params=sendListParams)
# 查看发送请求的url地址
print('带list参数的get请求地址为: ' + baiDu_listParams_response.url)
4.json模块
- json.dumps 用于将 Python 对象编码成 JSON 字符串。
import json
data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]
json = json.dumps(data)
print json
#运行结果如下
[{"a": 1, "c": 3, "b": 2, "e": 5, "d": 4}]
- json.loads 用于解码 JSON 数据。该函数返回 Python 字段的数据类型。
import json
jsonData = '{"code":200,"result":[{"items":[],"recommendType":"als"},{"items":[{"category":"流行金曲","id":11680,"name":"因为遇见你","performer":["欢欢延陵人"],"score":106.0,"tag":"['音质优']"}],"recommendType":"cold_start"}]}
';
text = json.loads(jsonData)
print text
#运行结果如下
{
"code": 200,
"result": [{
"items": [],
"recommendType": "als"
}, {
"items": [{
"category": "流行金曲",
"id": 11680,
"name": "因为遇见你",
"performer": ["欢欢延陵人"],
"score": 106.0,
"tag": "['音质优']"
}],
"recommendType": "cold_start"
}]
}
示例
#!/usr/bin/python3
# -*- coding: UTF-8 -*-
import json
import random
import requests
import time
import traceback
# 推荐地址
# host = "beta.baidu.com"#beta环境
url = "http://" + host
with open('../data/log.txt', 'r', encoding='utf-8') as f, \
open('../result/tuijian.txt', 'w', encoding='utf-8') as frp:
i = 0;
for q in f.readlines():
globalId = str(random.randint(100000000, 200000000)) + str(int(time.time()))
data = {
"globalId": "11111",
"userId": q.replace('\n', ''),#每行的回车空格去掉
# "domain": "story",
"domain": "music",
"numReco": "1",
# "category": ["故事", "童话故事"],
"category": ["音乐", "流行金曲"],
"tag": ["音质优"],
"recommendType": ["als", "item_based"]
}
i = i + 1;
try:
r = requests.post(url, json=data, timeout=1)#post请求方式
result = r.text.replace('\n', '').replace('\t', '')
print(str(i)+ "\t"+q.replace('\n', '') + "\t" + result)
frp.write(str(i) + "#" + q.replace('\n', '') + "#" + result + '\n')
result_dict = json.loads(result)#结果解析为json数据
time.sleep(0.1)
except:
traceback.print_exc()#打印错误日志信息
frp.flush()#flush方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区。