学习笔记
requests.get()方法的参数们
查询参数params
- 语法
res = requests.get(base_url,params=params,headers=headers)
#base_url为不包含查询参数的基本url
#params的参数值为字典类型,字典中键值对作为查询参数
#比如:{'kw':'兔子', 'pn':100}
requests.get方法在发起请求之前,会先对params查询参数进行编码, 编码后的查询参数会自动的和base_url进行拼接,拼接成一个完整的url地址后,再向网站发起请求。
- 举个例子(对兔子吧发起请求,并获取HTTP响应码)
代码:
import requestsbase_url = 'http://tieba.baidu.com/f?'
params = {'kw':'兔子', 'pn':100}
headers = {'User-Agent':"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 7.0; InfoPath.3; .NET CLR 3.1.40767; Trident/6.0; en-IN)"}
res = requests.get(base_url,params=params,headers=headers)
print(res.status_code)
输出:
200[Finished in 6.0s]
Web客户端验证参数auth
有的时候,我们访问一个网站,需要先通过网站的用户名和密码验证,才可以访问里面的内容。这时,我们就需要设置requests.get方法里的auth参数。
- 语法
res = requests.get(url,auth=auth,headers=headers)
#auth的参数值为元祖类型,元祖中为用户名和密码
证书认证参数verify
介绍这个参数之前,我们阐述一下http协议与https协议。
我们都知道http协议是一个无连接协议(假设我们都知道),而https协议是在http协议的基础之上加了一个安全套阶层协议(SSL)。这表示,我们用https协议传输数据时,数据是加密的,在数据传输的过程中,我们不用担心数据被拦截(当数据被某人截取后,某人拿到的是被加密的数据),但是用http协议传输数据,则会有很大风险(因为他传输的数据没有经过加密)。
备注1 :无连接的含义是,限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接,采用这种方式可以节省传输时间。
备注2 :SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。SSL协议标准的目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。
现在我们再阐述一下CA证书认证。
为啥要阐述这个?只要因特网服务类型是https的网站,就必须要做CA证书认证,如果不做CA证书认证,那么这个网站就是"不安全"的,并且可能无法正常访问。为啥不做CA证书认证就是不安全的呢?因为如果不在官方机构不做CA证书认证,那么这个加密过程很可能被"破解",也就是说,即使做了加密,也很容易被盗取信息。
好了,不就是学一个参数么,为啥要了解这些东西???
这是因为,如果我们用python去访问一个没有经过CA证书认证的因特网服务类型是https的网站, 那么就会抛出一个SSLError 异常,进而我们就无法正常访问这个网站。此时!我们就可以通过设置verify参数为False,忽略证书认证,访问网站。
- 语法
#verify默认为True
代理IP参数proxies
- 作用
当我们用自己的IP对某个网站进行爬虫时,如果对方的服务器发现我们是爬虫,那就有可能会封掉我们的IP, 在一段时间内,我们就不能用我们的IP地址進行網站的访问了。
但是!如果我们用代理IP去爬取网站,网站封掉的也是代理IP地址,不会封掉我们的IP地址,当代理IP被封掉时,我们就可以换一个代理IP,继续爬取~嘿嘿嘿。
那么我们如何获取代理IP地址?去网上搜吧,网上有很多免费的,或者花钱买也行。
还要注意一点,代理IP还分为高匿代理IP和透明代理IP,当我们用高匿代理IP去访问网站时,对方的web服务器只能看到代理IP的地址,但如果我们用透明代理IP去访问网站,对方的web服务器不仅能看到代理IP的地址,同时也能看到我们自己的IP地址。
- 语法
#比如:proxies = {'http':'http://IP:端口号'}
#再比如:proxies = {'https':'https://IP:端口号'}
res = requests.get(url,proxies=proxies,headers=headers);
这里就不举代理IP的例子了,因为从十分钟前到现在(2020年4月11日21:06:43)我还没有找到能用的免费代理IP(也可能是我自己代码没敲好??)。