我们来跨请求保持一些 cookie:
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"}}'
会话也可用来为请求方法提供缺省数据。这是通过为会话对象的属性提供数据来实现的:
import requests
s = requests.Session()
s.auth = ('user', 'pass')
s.headers.update({'x-test': 'true'})
# both 'x-test' and 'x-test2' are sent
r=s.get('http://httpbin.org/headers', headers={'x-test2': 'true'})
print(r.text)
- urllib的使用
- 先来看一下python2的使用方法
import urllib, urllib2
url = "http://www.baidu.com"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36",
"Host": "www.baidu.com"
}
data = {"k1": "v1", "k2": "v2"}
data = urllib.urlencode(data)
print(data)
response = urllib2.Request(url=url, headers=headers, data=data)
print()
- python3的使用方法
import urllib
from urllib import parse
from urllib.request import Request
url = "http://www.baidu.com"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36",
"Host": "www.baidu.com"
}
data = {"k1": "v1", "k2": "v2"}
data = parse.urlencode(data)
print(data)
response = Request(url=url, headers=headers, data=data)
print()
- 对于分块的编码请求,我们最好使用 Response.iter_content() 对其数据进行迭代。在理想情况下,你的 request 会设置 stream=True,这样你就可以通过调用 iter_content 并将分块大小参数设为 None,从而进行分块的迭代。如果你要设置分块的最大体积,你可以把分块大小参数设为任意整数。
import codecs
import requests
url = "https://img.alicdn.com/tfs/TB1MjYowCBYBeNjy0FeXXbnmFXa-520-280.jpg_q90_.webp"
res = requests.get(url=url, stream=True)
with codecs.open("hz.jpg", "wb") as f:
for chunk in res.iter_content(10000):
f.write(chunk)
- 把文件下载到本地
import urllib
from urllib.request import Request
from urllib import request
url = "http://inews.gtimg.com/newsapp_match/0/3967692951/0"
request.urlretrieve(url, 'qq.jpg')
- -