requests库的基本函数使用
程序员文章站
2022-04-11 16:11:51
...
requests库
发送GET请求
1、最简单的发送 get 请求:
import requests
response = requests.get("https://www.baidu.com/")
# 查看响应内容,按猜测的方式解码后的数据
print(type(response.text)) # <class 'str'>
print(response.text) # 出现乱码
# 查看响应内容,对utf-8编码的字符串,即显示中文
print(type(response.content)) # <class 'bytes'>
print(response.content.decode('utf-8'))
# 查看完整的url地址
print(response.url)
# 查看响应头部字符编码
print(response.encoding)
# 查看响应码
print(response.status_code)
2、添加 headers 和查询参数:
import requests
params = {
'wd':'中国'
}
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
'(KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
}
response = requests.get("https://www.baidu.com/s",params=params,headers=headers)
# 打开'baidu.html'并写入response.content
with open('baidu.html','w',encoding='utf-8') as fp:
fp.write(response.content.decode('utf-8'))
print(response.url)
response.text
和 response.content
的区别:
-
response.content
:直接从网络上抓取数据,没有经过任何解码,由于硬盘上和网络上传输的字符串都是bytes类型,所以它也是bytes类型。 -
response.text
:requests将response.content进行解码的字符串,解码需要制定一个编码方式,requests会根据自己的猜测来判断编码方式,所以有时会出现乱码,这时就应该使用response.content.decode('utf-8')
进行手动解码。
发送POST请求
1、最基本的 POST 请求可以使用 post 方法:
response = requests.post("https://baidu.com/",data=data)
2、传入data 和 headers
# -*- encoding: utf-8 -*-
import requests
url = 'https://www.lagou.com/jobs/positionAjax.json?city=%E6%B7%B1%E5%9C%B3&needAddtionalResult=false'
data = {
'first': 'true',
'pn': '1',
'kd': 'python'
}
headers = {
'Referer':'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
'(KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',
# 必要时加上cookie
}
response = requests.post(url,data=data,headers=headers)
# print(type(response.text))
# print(response.text)
# 如果返回的是json数据,那么可以调用response.json(),将json字符串转换为字典或者列表
print(response.json())
使用代理:
使用 requests
添加代理,只要在请求的方法中(比如 get
或者 post
)传递proxies参数就可以了
# -*- encoding: utf-8 -*-
import requests
proxy = {
'http':'101.132.39.115:8080'
}
# 'http://httpbin.org/ip'可以比较方便的用来检查当前的IP地址
response = requests.get('http://httpbin.org/ip',proxies=proxy)
print(response.text)
{
"origin": "101.132.39.115"
}
cookie:
如果一个响应中包含了 cookie
,那么可以利用cookie属性拿到这个返回的cookie值:
# -*- encoding: utf-8 -*-
import requests
response = requests.get('https://baidu.com/')
print(response.cookies)
print(response.cookies.get_dict())
<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>
{'BDORZ': '27315'}
session:
使用urllib库时,可以通过opener发送多个请求,多个请求之间是共享cookie的。
而如使用requests时,为达到共享cookie 的目的,可以使用requests库给我们提供的session对象,简单的说就是能解决模拟登录网页的问题。
# -*- encoding: utf-8 -*-
import requests
# response = requests.get('https://baidu.com/')
# print(response.cookies)
# print(response.cookies.get_dict())
url = 'http://www.renren.com/PLogin.do'
data = {
'email': "15814746672",
'password': "hp666666"
}
headers = {
'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,"
" like Gecko) Chrome/81.0.4044.138 Safari/537.36"
}
session = requests.session()
session.post(url, data=data, headers=headers)
response = session.get('http://www.renren.com/880151247/profile')
# 打开'renren.html'并写入response.text
with open('renren.html','w',encoding='utf-8') as fp:
fp.write(response.text)
注:data是一个字典,内容分别为登陆的账号/邮箱+密码,自己注册即可登录。
上一篇: 数据库查询语句锦集
下一篇: Mysql数据库导入千万条数据