将前序urllib总结中的各项功能用更简单实用的requests库方法替代
七大方法之1:get()
包含了添加请求头、查看cookies、保存为html或json文件、内网认证、免费代理、ssl证书问题的代码:
import requests
import random
url="https://www.baidu.com"
url='https://www.baidu.com/s?wd=美女'
url='https://api.github.com/user'
user_agent_list=[
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
"Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.9.168 Version/11.50"
]
headers={"User-Agent":random.choice(user_agent_list)}
#不随机就自己复制粘贴浏览器头部信息,注意与urllib不同这里headers是一个字典,且不用写request直接response=
# headers = {
# "User-Agent": " "
# }
#请求数据
response=requests.get(url,headers=headers)
# 1.获取请求头
request_headers = response.request.headers
print(request_headers)
# 2.获取响应头
response_headers = response.headers
print(response_headers)
# 3.响应状态码
code = response.status_code
print(code)
# 4.请求的cookie
request_cookie = response.request._cookies
print(request_cookie)
# 5.响应的cookie
response_cookie = response.cookies
print(response_cookie)
# 6.1 对于百度搜索结果获取数据并保存
data=response.content.decode('utf-8')
with open('baidu.html','w')as f:
f.write(data)
#6.2 保存json数据:
#url='https://api.github.com/user'
#由于data=response.content.decode()是str类型
#因此需要str-->dict:
#第一种方法
#data_dict=json.loads(data)
#print(data_dict['message'])
#第二种方法
#json()自动将json字符串 转换成 Python dict list
data=response.json()
print(type(data))
#7. 内网认证
user=""
pwd=""
auth=(user,pwd)
response=requests.get(url,auth=auth)
# 8.免费代理
free_proxy={'http':'121.233.251.218:9999'}
response=requests.get(url,headers=headers,proxies=free_proxy)
print(response.status_code)
#9.12306的ssl问题
url='https://www.12306.cn'
#因为https是有第三方CA证书认证的
#12306虽然是https 但不是CA证书,是自己颁布的
#解决办法:告诉web 忽略证书访问
#添加参数:verify
response=requests.get(url,headers=headers,verify=False)
data=response.content.decode()
with open('ssl.html','w')as f:
f.write(data)
七大方法之2:post()
#发送post请求
url=""
headers={}
data={
}
response=requests.post(url,data=data)
关于cookies参数——requests库的session类
#用session替代urllib的cookiejar
#session类 可以自动保存cookies===cookiesJar
session=requests.session()
#1.代码登录
login_url=""
headers={
""
}
login_form_data={
"username":"",
"pwd":"",
"formhash":"",
"backurl":""
}
login_response=session.post(login_url,data=login_form_data,headers=headers)
#2.登录成功之后,带着有效的cookie去访问 请求目标数据
data=session.get(url,headers=headers).content.decode()
with open('cookie2.html','w')as f:
f.write(data)
Q:为什么不用开头获取到的cookies参数呢?
A:requests.get()中与headers类似,cookies的参数类型也要求是dict。所以也可以自己转,但很明显便捷性比以上代码差远了