Requests库

Requests

Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP
如果你看过上篇文章关于urllib库的使用,你会发现,其实urllib还是非常不方便的,而Requests它会比urllib更加方便,可以节约我们大量的工作。(用了requests之后,你基本都不愿意用urllib了)一句话,requestspython实现的最简单易用的HTTP库,建议爬虫使用requests库。

1.文本编码

很多情况下的网站如果直接response.text会出现乱码的问题通过decode()转换为utf-8,这样就解决了通过response.text直接返回显示乱码的问题.

import requests

response=requests.get("https://www.baidu.com")

response.encoding="utf-8"

print(type(response))

print(response.status_code)

print(response.cookies)

print(response.text)

2.各种请求方式

#各种请求方式

import requests

requests.post("http://httpbin.org/post")

requests.put("http://httpbin.org/put")

requests.delete("http://httpbin.org/delete")

requests.head("http://httpbin.org/get")

requests.options("http://httpbin.org/get")

3.get请求

#get请求,带参

import requests

url="http://httpbin.org/get"

data = {

    "name":"xx",

    "age":22

}

response=requests.get(url,params=data)

print(response)

4.解析json

python的对象编码转换为json格式的字符串,反序列化可以理解为:把json格式

字符串解码为python数据对象。在python的标准库中,专门提供了json库。

#json的主要方法

import json

print(json.__all__)

输出:['dump', 'dumps', 'load', 'loads', 'JSONDecoder', 'JSONDecodeError', 'JSONEncoder']

Json.dumps:python对象编码成json字符串

Json.loads:将字符串解码为python对象。

import json

dict1={'name':'花花','age':24,'address':'上海'}

print (u'未序列化前的数据类型为:',type(dict1))

print (u'未序列化前的数据:',dict1)

#对dict1进行序列化的处理

str1=json.dumps(dict1)

print (u'序列化后的数据类型为:',type(str1))

print (u'序列化后的数据为:',str1)

#对str1进行反序列化

dict2=json.loads(str1)

print (u'反序列化后的数据类型:',type(dict2))

print (u'反序列化后的数据:',dict2)

输出:未序列化前的数据类型为: <class 'dict'>

未序列化前的数据: {'name': '花花', 'age': 24, 'address': '上海'}

序列化后的数据类型为: <class 'str'>

序列化后的数据为: {"name": "\u82b1\u82b1", "age": 24, "address": "\u4e0a\u6d77"}

反序列化后的数据类型: <class 'dict'>

反序列化后的数据: {'name': '花花', 'age': 24, 'address': '上海'}

#使用request

import json,requests

response=requests.get("http://httpbin.org/get")

print(type(response.text))

print(response.json())

print(json.loads(response.text))

print(type(response.json()))

  1. 添加headders

在谷歌浏览器里输入chrome://version,复制出来用户代理信息的信息头。例子:

import requests

headers = {

    "User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"

}

response =requests.get("https://www.zhihu.com",headers=headers)

print(response.text)

2.基于Post请求

通过在发送post请求时添加一个data参数,这个data参数可以通过字典构造成

import requests,json

url="http://httpbin.org/post"

data={

    "name":"花花",

    "age":24

}

response=requests.post(url,data=data)

print(json.loads(response.text))

#其他属性

print(response.status_code)

print(response.cookies)

print(response.headers)

print(response.history)

3.文件上传

实现方法和其他参数类似,也是构造一个字典然后通过files参数传递

import requests

files= {"files":open("git.jpeg","rb")}

response = requests.post("http://httpbin.org/post",files=files)

print(response.text)

4.获取cookie

import requests

response=requests.get("http://www.baidu.com")

print(response.cookies)

for key,value in response.cookies.items():

print(key+"="+value)

5.会话维持

cookie的一个作用就是可以用于模拟登陆,做会话维持

#通过创建一个session对象,两次请求都通过这个对象访问

import requests

s=requests.session()

s.get("http://httpbin.org/cookies/set/number/123456")

response=s.get("http://httpbin.org/cookies")

print(response.text)

6.证书验证

import requests

from requests.packages import urllib3

urllib3.disable_warnings()

response = requests.get("https://www.12306.cn",verify=False)

print(response.status_code)

代理设置

异常处理

import requests
from requests.exceptions import ReadTimeout,ConnectionError,RequestException
try:
    response=requests.get("http://httpbin.org/get",timout=0.1)
    print(response.status_code)
except ReadTimeout:
    print("timeout")
except ConnectionError:
    print("connection Error")
except RequestException:
    print("error")

猜你喜欢

转载自www.cnblogs.com/huaerye/p/9132607.html