闲来无事,先看看爬虫库requests的结构(官方文档地址)。
直接看关于请求的requests包里的内容
大多数文件从名字就可以判断出来时什么作用,所以我们先从api.py先研究,因为这里面的函数是大家最常使用的。api.py如下(为了更直观,删掉了注释):
from . import sessions
def request(method, url, **kwargs):
#通过使用'with'语句,我们确定会话是关闭的,因此我们避免了让套接字打开,
#在某些情况下会触发ResourceWarning,而在其他情况下看起来像内存泄漏。
with sessions.Session() as session:
#生成了一个sessions包中session类的实例,并命名为session
return session.request(method=method, url=url, **kwargs)
def get(url, params=None, **kwargs):
return request('get', url, params=params, **kwargs)
def options(url, **kwargs):
return request('options', url, **kwargs)
def head(url, **kwargs):
kwargs.setdefault('allow_redirects', False)
# 检查kwargs中是否有allow_redirects这个键,如果没有,则添加,另一项是键值
return request('head', url, **kwargs)
def post(url, data=None, json=None, **kwargs):
return request('post', url, data=data, json=json, **kwargs)
def put(url, data=None, **kwargs):
return request('put', url, data=data, **kwargs)
def patch(url, data=None, **kwargs):
return request('patch', url, data=data, **kwargs)
def delete(url, **kwargs):
return request('delete', url, **kwargs)
我们可以看到我们常用的函数requests.request(),requests.get(),requests.options(),requests.put(),requests.head(),requests.post(),requests.patch(),requests.delete()。很明显Requests库所有的功能都可以通过以上方法访问,它们全部都会返回一个 Response 对象的实例。
当然也可以不看这些函数,如包名(api)一样,这些都是api函数,最终都指向requests.request()函数,而request()函数体里面是生成了一个sessions包中session类的实例,并命名为session,然后调用了session中的request函数。因此我们所有的请求其实都会生成一个会话,然后进一步请求。



