requests库的使用

centuryw4年前 (2019-03-02)Python120

官方文档

判断请求是否成功

# 判断请求是否成功
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)

    发表评论

    访客

    看不清,换一张

    ◎欢迎参与讨论,请在这里发表您的看法和观点。