[python 爬虫]requests的高阶用法

Session函数的用法

Session 函数可以保存相关变量,如此我们便可以在每次提交数据的时候不需要重复输入变量(其中保存的变量就包含cookies)所以我们来试试吧!

s = requests.Session()

s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
r = s.get('http://httpbin.org/cookies')

print(r.text)
# '{"cookies": {"sessioncookie": "123456789"}}'

当然我们也可以自定义一些参数来用到Session里面来:

s = requests.Session()
s.auth = ('user', 'pass')
s.headers.update({'x-test': 'true'})

# both 'x-test' and 'x-test2' are sent
s.get('http://httpbin.org/headers', headers={'x-test2': 'true'})

但是这里要注意到的是通过以下方式的自定义参数不能够在下一次请求之中使用:

s = requests.Session()

r = s.get('http://httpbin.org/cookies', cookies={'from-my': 'browser'})
print(r.text)
# '{"cookies": {"from-my": "browser"}}'

r = s.get('http://httpbin.org/cookies')
print(r.text)
# '{"cookies": {}}'

Session也可以用作网页内容的管家:

with requests.Session() as s:
    s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')

这个意思是说这个Session只在with所包含的内容中存在

请求和回应

每次我们使用requests.get()函数的时候,我们都会向服务器发出请求,但是我们必须同时意识到服务器给我们的回应,这些回应既包含服务器给我们的回应,也包含我们发出请求的内容比如下面这个例子:

>>> r = requests.get('http://en.wikipedia.org/wiki/Monty_Python')
>>> r.headers
#{'content-length': '56170', 'x-content-type-options': 'nosniff', 'x-cache':
'HIT from cp1006.eqiad.wmnet, MISS from cp1010.eqiad.wmnet', 'content-encoding':
'gzip', 'age': '3080', 'content-language': 'en', 'vary': 'Accept-Encoding,Cookie',
'server': 'Apache', 'last-modified': 'Wed, 13 Jun 2012 01:33:50 GMT',
'connection': 'close', 'cache-control': 'private, s-maxage=0, max-age=0,
must-revalidate'
, 'date': 'Thu, 14 Jun 2012 12:59:39 GMT', 'content-type':
'text/html; charset=UTF-8', 'x-cache-lookup': 'HIT from cp1006.eqiad.wmnet:3128,
MISS from cp1010.eqiad.wmnet:80'
}

如果想要查看我们向服务器发出的请求,我们需要用到以下指令:

>>> r.request.headers
{'Accept-Encoding': 'identity, deflate, compress, gzip',
'Accept': '*/*', 'User-Agent': 'python-requests/1.2.0'}

官方文档中还有一些其他的用法,我大致浏览了以下,在我们的实践中未必能够很有效的用上,因此就不多做赘述

Leave a Reply

Your email address will not be published. Required fields are marked *