Requests通过会话信息来获取cookie信息
Cookie的五要素:
Name value domain path expires
打印cookie的五大要素
import requests
url = "http://www.hao123.com"
s = requests.session()
r = s.get(url)
print (r.cookies)
for cook in r.cookies:
print (cook.name)
print (cook.value)
print (cook.domain)
print (cook.path)
print (cook.expires)
print ("#" * 30)打印结果:
<RequestsCookieJar[<Cookie BAIDUID=C425EDB0B83699C89BDA3D02B25C53BA:FG=1 for .hao123.com/>, <Cookie hz=0 for .www.hao123.com/>, <Cookie ft=1 for www.hao123.com/>, <Cookie v_pg=normal for www.hao123.com/>]> BAIDUID C425EDB0B83699C89BDA3D02B25C53BA:FG=1 .hao123.com / 1548337791 ############################## hz 0 .www.hao123.com / None ############################## ft 1 www.hao123.com / 1516809599 ############################## v_pg normal www.hao123.com / None ##############################
你只要获得了登陆页的cookies,你就可对网站进行合理的请求和访问了。
使用已知cookie信息,如何访问网站:
import requests
url = 'http://httpbin.org/cookies'
r = requests.get(url, cookies={'key1': 'value1', 'key2': 'value2'})
print(r.text)结果:
{
"cookies": {
"key1": "value1",
"key2": "value2"
}
}请求到我的IP地址:
import requests url = "http://2017.ip138.com/ic.asp" s = requests.session() r = s.get(url=url) print (r.encoding) r.encoding = "gbk" print (r.text)
代理访问:
采集时为避免被封IP,经常会使用代理。
requests也有相应的proxies属性。
西刺代理
import requests
proxies = {
"http": "http://139.208.187.142:8118"
}
r1 = requests.get("http://2017.ip138.com/ic.asp", proxies=proxies)
r1.encoding = "gbk"
print (r1.text)请求结果:
<html> <head> <meta http-equiv="content-type" content="text/html; charset=gb2312"> <title> 您的IP地址 </title> </head> <body style="margin:0px"><center>您的IP是:[139.208.187.142] 来自:吉林省延边朝鲜族自治州 联通</center></body></html>
如果代理需要账户和密码,则需这样:
proxies = {
"http": "http://user:pass@10.10.1.10:3128/",
}requests的中文乱码问题:
import requests
param = {"key1": "hello", "key2": "world"}
url = 'https://www.baidu.com/'
r = requests.get(url=url)
print(r.encoding) #ISO-8859-1默认使用的是这个
r.encoding = "utf-8"
print(r.text)这样就可以正常显示了
总结:
Requests给你提供的所有接口,在传输数据的时候,都可以以key:value的形式进行传输,这个也是为什么特别使用requests的原因
如果你使用urllib,那么你就没有这么幸运了,很多事情都需要你自己去处理,并不可以直接通过dict的形式进行传输,需要进行装换。
原文:http://blog.51cto.com/286577399/2064984