Python爬虫之requests库
文章目录
1、requests库介绍
Python自带的请求库urllib库用起来不是很方便,特别是指定请求方式、处理cookie等方面上做的不是很好。第三方库requests库便解决了很多麻烦。requests库可以直接通过get()、post()、delete()方法发送请求,无论是语义上还是简易度都比urllib要好很多。
2、请求方法
最常用的请求方法包括GET、POST、PUT、DELETE四种,分别对应查,增,改,删四种操作。jpa操作中对一般对PUT()的使用指需要传数据库中某个表中数据的id值和需要修改的属性即可,delete()就更简单了,传id值即可。因此,我们重点需要说的是GET和POST方法。
简单来说,就是get()传递的参数不安全,没有保密功能,适合做查询功能,比如我们在百度搜索东西,域名后跟着那一大串东西就是参数,我们是可以看见的。而post()的参数较为安全,我们一般看不到,适合做增加功能,比如我们在注册用户时,实际就是向数据库中添加一条用户记录,此时我们不希望将密码等信息暴露,就需要post()方法。
下面演示使用request中的get()和post():
import requests
"""
使用get方法发送请求
"""
if __name__ == '__main__':
"""
def get(url, params=None, **kwargs):
url:目标url
params:请求参数,字典类型(也可以说是json数据)
"""
data = {
"name":"Tom",
"age":23
}
response = requests.get("http://httpbin.org/get",params=data)
print(response.text)
结果返回:
{
"args": {
“age”: “23”,
“name”: “Tom”
},
“headers”: {
“Accept”: “/”,
“Accept-Encoding”: “gzip, deflate”,
“Host”: “httpbin.org”,
“User-Agent”: “python-requests/2.23.0”,
“X-Amzn-Trace-Id”: “Root=1-5e65ef5b-c34857961bf8a91a5e993244”
},
“origin”: “113.101.32.108”,
“url”: “http://httpbin.org/get?name=Tom&age=23”
}
使用get方法抓取二进制数据,因为网络上每一个资源(包括图片和音视频等等)都有属于自己的URL:
import requests
if __name__ == '__main__':
"""
获取淘宝网的logo
"""
response = requests.get("http://taobao.com/favicon.ico")
# 由于是二进制数据,所以直接输出内容没什么意义
# 保存到本地
with open("favicon.ico",'wb') as f:
f.write(response.content)
post()方法演示:
import requests
if __name__ == '__main__':
data = {
"name": "Tom",
"age": 23
}
response = requests.post("http://httpbin.org/post", data=data)
print(response.text)
{
“args”: {},
“data”: “”,
“files”: {},
“form”: {
“age”: “23”,
“name”: “Tom”
},
“headers”: {
“Accept”: “/”,
“Accept-Encoding”: “gzip, deflate”,
“Content-Length”: “15”,
“Content-Type”: “application/x-www-form-urlencoded”,
“Host”: “httpbin.org”,
“User-Agent”: “python-requests/2.23.0”,
“X-Amzn-Trace-Id”: “Root=1-5e65f1d6-c0a78fcc0432fb4c7d32fec8”
},
“json”: null,
“origin”: “113.101.32.108”,
“url”: “http://httpbin.org/post”
}
使用post传递的参数都被保存form属性里,因为我们通常是使用表单上传数据的。
3、其他用法
不多说了,用法不难,看代码和注释便一目了然
import requests
def fileUpoload():
"""
上传文件的方法
"""
files = { # 构造上传文件的json格式数据
'file':open('favicon.ico','rb')
}
response = requests.post("http://httpbin.org/post",files=files)
print(response.text)
def getCookies():
response = requests.get("http://www.baidu.com")
cookies = response.cookies
for k,v in cookies.items():
print(k , "=" , v)
def getSession():
"""
获取会话
"""
session = requests.Session()
session.get("http://httpbin.org/cookies/set/numner/123456789") # 一种REST风格的URL格式,相当于向cookie设置number=123456789
# 只要session没有被关闭,便可以获得会话中的数据
response = session.get("http://httpbin.org/cookies")
print("第一个会话数据:" , response.text)
session.close()
# 开启另一个会话
anotherSession()
def anotherSession():
session = requests.Session()
response = session.get("http://httpbin.org/cookies")
print("第二个会话数据:" ,response.text)
if __name__ == '__main__':
# fileUpoload()
# getCookies()
getSession()
有错误的地方敬请指出!觉得写得可以的话麻烦给个赞!欢迎大家评论区或者私信交流!
上一篇: Python爬虫 --requests库
下一篇: python爬虫-Requests库