Python3网络爬虫中的requests高级用法详解
本文将介绍Python3中requests库的高级用法,主要包括会话(Session)、身份验证、代理、文件上传以及使用Cookie等几个方面。
会话
对于复杂的操作例如登录和保持状态,我们可以使用Session来管理请求:
import requests
s = requests.Session()
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
r = s.get('http://httpbin.org/cookies')
print(r.text)
这个例子中,我们先创建了一个Session,并通过set()方法将'123456789'保存在名为'sessioncookie'的Cookies中。然后我们再访问'http://httpbin.org/cookies',返回的结果中可以看到我们刚才保存的Cookies。
身份验证
有些网站需要登录才能访问一些受保护的资源,requests提供了一个方便的身份验证机制:
import requests
from requests.auth import AuthBase
from requests.auth import HTTPBasicAuth
class TokenAuth(AuthBase):
def __init__(self, token):
self.token = token
def __call__(self, r):
r.headers['Authorization'] = 'Bearer ' + self.token
return r
# 使用基本式身份验证
response = requests.get('https://api.github.com/user', auth=HTTPBasicAuth('username', 'password'))
# 使用自定义身份验证
response = requests.get('https://httpbin.org/get', auth=TokenAuth('12345'))
上面的例子中,我们展示了两种不同的身份验证方法。首先,我们使用HTTPBasicAuth进行基本式身份验证,将用户名和密码传递给auth参数。接下来,我们自定义了一个TokenAuth类,使用自己的Token来进行身份验证。
代理
对于一些被墙的网站,我们可以通过设置代理来进行访问。requests支持HTTP、HTTPS和SOCKS代理:
import requests
# HTTP代理
proxies = {
'http': 'http://127.0.0.1:8888',
'https': 'https://127.0.0.1:8888',
}
requests.get('http://example.org', proxies=proxies)
# SOCKS代理
proxies = {
'http': 'socks5://user:password@host:port',
'https': 'socks5://user:password@host:port'
}
requests.get('http://example.org', proxies=proxies)
在这个例子中,我们分别展示了使用HTTP代理和SOCKS代理的方法。在proxies参数中传递代理的信息即可。
文件上传
requests库可以轻松地将文件上传到Web服务。只需要使用post()或者put()方法,并将文件作为参数传递即可:
import requests
url = 'http://httpbin.org/post'
files = {'file': open('report.xls', 'rb')}
r = requests.post(url, files=files)
print(r.text)
这个例子中,我们将一个名为'report.xls'的文件上传到'http://httpbin.org/post'。open()函数中的'rb'参数指定了将文件以二进制方式读取。在post()方法中,将这个文件作为文件参数上传即可。
使用Cookie
如果我们需要管理cookies,requests也提供了非常便捷的管理方式:
import requests
url = 'http://httpbin.org/cookies'
cookies = dict(cookies_are='working')
r = requests.get(url, cookies=cookies)
print(r.text)
在这个例子中,我们使用了dict()函数定义了我们需要发送的Cookies:'cookies_are'等于'working'。然后将这些cookies作为参数传递给了get()方法。
以上就是本文对requests库高级用法的代码示例和简要解释,相信对读者改善爬虫的效率和方便开发会有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python3网络爬虫中的requests高级用法详解 - Python技术站