一、什么是requests
Requests是用python语言基于urllib编写的,采用的是Apache2Licensed开源协议的HTTP库。
相对于urllib库(自带,无需手动安装)而言,requests库的使用显得简单便捷(本质就是封装了urllib3)。
官方文档:http://cn.python-requests.org/zh_CN/latest/
二、requests的安装
1.电脑运行ctrl+R输入cmd(命令提示符)
2.运行pipinstallrequests安装
三、requests库的使用
在requests库中,我们常用的是requests.get()和requests.post()
post请求与get请求区别:
1.在客户端,Get方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放置在HTMLHEADER内提交。
2.GET方式提交的数据最多只能有1024Byte,而POST则没有此限制。
3.安全性问题。正如在(1)中提到,使用Get的时候,参数会显示在地址栏上,而Post不会。所以,如果这些数据是中文数据而且是非敏感数据,那么使用get;如果用户输入的数据不是中文字符而且包含敏感数据,那么还是使用post为好。
requests.get()
importrequests
response=requests.get('http://www.baidu.com')#获取百度的源码
response.encoding=response.apparent_encoding#程序分析源码采用的编码格式
print(response.text)#打印源码
其实,我们在使用过程中经常需要传递一些参数,如百度搜索python,这时我们就可以通过拼接构造URL的方式实现,那么数据会以键/值对的形式置于URL中,跟在一个问号的后面。
例如:http://www.baidu.com/s?wd=python中Requests允许你使用params关键字参数,以一个字典来提供这些参数。
importrequests
url='http://www.baidu.com/s'
params={
'wd':'python'
}
response=requests.get(url,params=params)#传入参数
response.encoding=response.apparent_encoding
print(response.url)#返回http://www.baidu.com/s?wd=python
当然,你也可以使用最简单的拼接
url='http://www.baidu.com/s?wd='+'python'
response=requests.get(url)
print(response.url)#返回http://www.baidu.com/s?wd=python
拓展知识:
你还可以将一个列表作为值传入:
importrequests
params={'key1':'value1','key2':['value2','value3']}
r=requests.get('http://httpbin.org/get',params=params)
print(r.url)
#打印的结果是
#http://httpbin.org/get?key1=value1&key2=value2&key2=value3
requests.post()
importrequests
data={
"name":"zhaofan",
"age":23
}
response=requests.post("http://httpbin.org/post",data=data)
print(response.text)
'''
返回
{
"args":{},
"data":"",
"files":{},
"form":{
"age":"23",
"name":"zhaofan"
},
"headers":{
"Accept":"*/*",
"Accept-Encoding":"gzip,deflate",
"Content-Length":"19",
"Content-Type":"application/x-www-form-urlencoded",
"Host":"httpbin.org",
"User-Agent":"python-requests/2.20.0"
},
"json":null,
"origin":,
"url":"https://httpbin.org/post"
}
'''
其他HTTP请求类型:PUT,DELETE,HEAD以及OPTIONS其实都是差不多的用法
r=requests.put('http://httpbin.org/put',data={'key':'value'})
r=requests.delete('http://httpbin.org/delete')
r=requests.head('http://httpbin.org/get')
r=requests.options('http://httpbin.org/get')
四、定制请求头
网站建立的最终目的是让人来访问的,其实几乎每个网站都是拒绝爬虫的,因此引出各种各样的反爬手段,那么网站是靠什么来判定我们是爬虫的?
方法有很多,其中最普遍的是通过请求头来判断。
在发送HTTP请求的时候浏览器都会带上请求头信息等,如果我们的程序没有带上,或者带上的请求头信息是错误的,也就是不被服务器认可的,那么就会遭到服务器的拒绝!
importrequests
url='http://www.baidu.com/s'
params={
'wd':'python'
}
#请求头
headers={
'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/73.0.3683.86Safari/537.36',
}
response=requests.get(url,params=params,headers=headers)
此外,我们也可以通过fake_useragent来随机生成一个请求头
fromfake_useragentimportUserAgent
us=UserAgent()
print(us.random)#打印随机生成的请求头
注意:我们只是加上了User-Agent信息就可以正常访问了,但是浏览器是发送了比我们更多的信息的。如果遇到加上请求头User-Agent信息也不成功的网站,可以尝试添加其他请求头信息。
五、响应状态码
importrequests
url='http://www.baidu.com/'
response=requests.get(url)
print(response.status_code)#返回200
相关的响应状态码请访问网友的博客:https://www.cnblogs.com/dekui/p/7801289.html
六、cookie
现在的网站中有这样的一种网站类型,也就是需要用户注册以后,并且登陆才能访问的网站,或者说在不登录的情况下不能访问自己的私有数据,例如微博,微信等。
网站记录用户信息的方式就是通过客户端的Cookie值。例如:当我们在浏览器中保存账号和密码的同时,浏览器在我们的电脑上保存了我们的用户信息,并且在下次访问这个页面的时候就会自动的为我们加载Cookie信息。
在需要登陆的网站中,浏览器将Cookie中的信息发送出去,服务器验证Cookie信息,确认登录。既然浏览器在发送请求的时候带有Cookie信息,那么我们的程序同样也要携带Cookie信息。
Cookie是当你访问某个站点或者特定页面的时候,留存在电脑里的一段文本,它用于跟踪记录网站访问者的相关数据信息,比如:搜索偏好、行为点击,账号,密码等内容。
通常Cookie值信息可以在浏览器中复制过来,放到headers中:
headers={
'Accept':'application/json,text/javascript,*/*;q=0.01',
'Accept-Encoding':'gzip,deflate,br',
'Accept-Language':'zh-CN,zh;q=0.9',
'Connection':'keep-alive',
'Content-Length':'26',
'Content-Type':'application/x-www-form-urlencoded;charset=UTF-8',
'Cookie':'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',#浏览器中复制
'Host':'www.lagou.com',
'Origin':'https://www.lagou.com',
'Referer':'https://www.lagou.com/jobs/list_Python?labelWords=&fromSearch=true&suginput=',
'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/74.0.3729.157Safari/537.36',
'X-Anit-Forge-Code':'0',
'X-Anit-Forge-Token':'None',
'X-Requested-With':'XMLHttpRequest',
}
如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h54925.shtml