官方文档
判断请求是否成功
# 判断请求是否成功
url = 'http://www.baidu.com'
response = requests.get(url)
assert response.status_code == 200
发送带参数请求
示例:模拟百度搜索关键字 “googel”
# 模拟百度搜索关键字 “googel”
url = 'https://www.baidu.com/'
headers = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
}
# 第一种方法
get_data = {
'wd': 'googel'
}
# 第二种方法
url = 'https://www.baidu.com/s?wd=%s' % 'googel'
# 第三种
url = 'https://www.baidu.com/s?wd={}'.format('googel')
response = requests.get(url, headers=headers, params=get_data)
# assert response.status_code == 200
print(response.request.url)
使用代理IP
- 准备一批ip地址,组成ip池,随机选择一个ip来使用
- 如何随机选择代理ip,让使用次数最少的ip地址有更大的可能性被用
- {‘ip’:ip,’times’:0}
- [{},{},{}]对这个ip的列表进行排序,按照使用次数
- 选择使用次数少的ip,从中随机选择
- 检查ip的可用性:可以使用requests添加超时参数,判断ip地址的质量;使用ip质量检测的网站
cookie和session
cookie和session的区别
- cookie数据存放在客户浏览器上,session数据存放在服务器上
- cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗
- session会在一定时间内保存在服务器上,当访问增多,会比较占用服务器性能
- 单个cookie保存的数据不能超过4k
cookie和session的好处和弊端
好处:能够请求到登陆之后的页面
坏处:一套cookie和session往往和一个用户对应,请求太快或次数太多,容易被检测
尽量不要使用cookie,但为了获取登陆之后的页面,必须发送带有cookies的请求
requests的session的使用方法
# 1.实例化一个session对象
# 2.让session发送get或post请求
session = requests.session()
response = session.get(url,headers)
获取登陆后的页面的三种方式
- 实例化session,使用session发送post请求,再使用它获取登陆后的页面
- headers中添加cookie键,值为cookie字符串
- 在请求方法中添加cookies参数,接受字典形式的cookie
response.text和response.content的区别
response.test
- 类型:str
- 解码类型:根据HTTP头部对响应的编码作出有根据的推测,推测的文本编码
- 如何修改?:response.encoding=”utf8″
response.content
- 类型:bytes
- 解码类型:未指定
- 如何修改?:response.content.decode(“utf8”)
保存图片
# url为图片地址
response = requests.get(url)
with open('picture.png','wb') as f:
f.write(response.content)
cookies的获取和设置
response = requests.get("http://www.baidu.com")
# 获取cookies
print(response.cookies)
print(requests.utils.dict_from_cookiejar(response.cookies))
# 设置cookies
print(requests.utils.cookiejar_from_dict({{'BDORZ': '27315'}}))
url的编码和解码
# url解码
print(requests.utils.unquote("https%3a%2f%2ftieba.baidu.com%2ff%3fkw%3d%e7%88%ac%e8%99%ab"))
# url编码
print(requests.utils.quote("https://tieba.baidu.com/f?kw=爬虫"))
请求ssl证书验证
# 请求ssl证书验证
response = requests.get(url,verify=False)
设置超时
超过预定时间未响应报错
# 设置超时
response = requests.get(url,timeout=2)