Requests
-HTTP for Humans更简洁更友好
-继承了urllib的所有特征
-底层使用的是urllib3
-开源地址:https://github.com/requests/requests
-中文文档:http://docs.python-requests.org/zh_CN/latest/iindex.html
-安装:conda install requests
1、get请求
-requests.get(url)
-requests.request("get",url)
-可以带有headers和parmas参数
import requests
url = "http://www.baidu.com"
#两种请求方式
req = requests.get(url)
print(req.text)
#使用request请求
rsp = requests.request("get",url)
print(rsp.text)
2、get返回内容
'''
使用参数headers和params,研究返回结果
'''
import requests
url = "http://www.baidu.com/s?"
kw = {
"wd":"哈士奇"
}
#如果写这么点爬不下来,就可劲伪装,伪装成浏览器,把request Headers那块都抄下来
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
}
rsp = requests.get(url,params=kw,headers=headers)
print(rsp.text)
print(rsp.content)
print(rsp.url)
print(rsp.encoding)
print(rsp.status_code) #请求返回码
3、post
-rsp = requests.post(url,data=data)
-date,headers要求dict类型
-案例:分析百度词典
'''
利用parse模块模拟post请求,分析百度词典
分析步骤:
1、打开审查元素
2、尝试输入单词,发现每敲一个字母后都有请求
3、请求地址是 http://fanyi.baidu.com/sug
4、利用NetWork-All-Headers-查看-发现FormData的值是kw:girl
5、检查返回内容格式,发现返回的是json格式内容==>需要用到json包
'''
import requests
from urllib import parse
#负责处理json格式模块
import json
'''
大概流程:
1、利用data构造内容,然后urlopen打开
2、返回一个json格式的结果
3、结果就应该是所要查询的释义
'''
baseurl = "https://fanyi.baidu.com/sug"
a = input("输入所要翻译的语句:")
#存放用来模拟form的数据一定是dict格式
data = {
'kw':a
}
#不需要使用parse模块对data进行编码
#data = parse.urlencode(data).encode("utf-8")
#我们需要构造一个请求头,请求头部应该至少包含传入的数据的长度
#request要求传入的请求头是一个dict格式
headers = {
#因为使用post,至少应该包含content-length 字段
'Content-Length':str(len(data))
}
#有了headers-data-url 就可以尝试发出请求了
rsp = requests.post(baseurl,data=data,headers=headers)
print(rsp.text)
html = rsp.json()
print(html)
for item in html["data"]:
print(item['k'],'--',item['v'])
运行结果:
输入所要翻译的语句:i love
{"errno":0,"data":[{"k":"I love you","v":"n. \u6211\u7231\u4f60;"},{"k":"I love my job","v":" \u6211\u7231\u6211\u7684\u5de5\u4f5c;"},{"k":"I Love You Very Much","v":" [\u7535\u5f71]\u6211\u7279\u522b\u7279\u522b\u7231\u4f60;"},{"k":"I Love You","v":" [\u7535\u5f71]\u6211\u7231\u4f60;"},{"k":"I love this game","v":" \u6211\u559c\u6b22\u8fd9\u4e2a\u6e38\u620f; \u6211\u7231\u8fd9\u6bd4\u8d5b; \u6211\u949f\u7231\u8fd9\u9879\u8fd0\u52a8;"}]}
{'errno': 0, 'data': [{'k': 'I love you', 'v': 'n. 我爱你;'}, {'k': 'I love my job', 'v': ' 我爱我的工作;'}, {'k': 'I Love You Very Much', 'v': ' [电影]我特别特别爱你;'}, {'k': 'I Love You', 'v': ' [电影]我爱你;'}, {'k': 'I love this game', 'v': ' 我喜欢这个游戏; 我爱这比赛; 我钟爱这项运动;'}]}
I love you -- n. 我爱你;
I love my job -- 我爱我的工作;
I Love You Very Much -- [电影]我特别特别爱你;
I Love You -- [电影]我爱你;
I love this game -- 我喜欢这个游戏; 我爱这比赛; 我钟爱这项运动;
4、proxy
proxies = {
"http":"address of proxy",
"https":"address of proxy"
}
rsp = requests.request("get","http:xxx",proxies=proxies)
-代理有可能报错,如果使用人数多,考虑安全问题,可能会被强行关闭
5、用户验证
-代理验证
#可能需要使用HTTP basic Auth:可以这样
#格式为 用户名:密码@代理地址:端口地址
proxy = {"http":"china:123456@192.168.1.123:4444"}
rsp = requests.get("http://baidu.com",proxies=proxy)
-web客户端验证
-如果遇到web客户端验证,需要添加auth = (用户名,密码)
auth = {"test1","123456"} #授权信息
rsp = requests.get("http://www.baidu.com",auth = auth)
6、cookie
-rquests可以自动处理cookie信息
rsp = requests.get("http://xxxxxx")
#如果对方服务器给传送过来cookie信息,则可以通过反馈的cookie属性得到
#返回一个cookiejar实例
cookiejar = rsp.cookies
#可以讲cookiejar转换字典
cookiedict = requests.utils.dict_from_cookiejar(cookiejar)
7、session
-跟服务器端session不是一个东东
-模拟一次会话,从客户端浏览器链接服务器开始,到客户端浏览器断开
-能让我们跨请求时保持某些参数,比如在同一个session实例发出的所有请求之间保持cookie
#创建session对象,可以保持cookie值
ss = requests.session()
headers = {"Usei-Agent":"xxxx"}
data = {"name":"xxxx"}
#此时由创建的session管理请求,负责发出请求
ss.post("http://www/baidu.com",data=data,headers=headers)
rsp = ss.get("xxx")
8、https请求验证ssl证书
-参数verify负责表示是否需要验证ssl证书,默认是True
-如果不需要验证ssl证书,则设置成False表示关闭