python--爬虫--获取和解析存储网页内容--以薄荷网为例(5)
- UID
- 1066743
|
python--爬虫--获取和解析存储网页内容--以薄荷网为例(5)
第三方模块requests
导入
import requests
1、简单获取get
r = requests.get('https://api.github.com/events')
print(r.text)
2、post方式传参
r = requests.post('http://httpbin.org/post', data = {'key':'value'})
print(r.text)
3、其他方式
r = requests.put('http://httpbin.org/put', data = {'key':'value'})
r = requests.delete('http://httpbin.org/delete')
r = requests.head('http://httpbin.org/get')
r = requests.options('http://httpbin.org/get')
print(r.text)
4、get方式传参
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("http://httpbin.org/get", params=payload)
print(r.text)
或者
payload = {'key1': 'value1', 'key2': ['value2', 'value3']}
r = requests.get('http://httpbin.org/get', params=payload)
print(r.text)
通过打印输出该 URL,你能看到 URL 已被正确编码:
print(r.url)
输出如下:
http://httpbin.org/get?key2=value2&key1=value1
或者
http://httpbin.org/get?key1=value1&key2=value2&key2=value3
5、编码
Requests 会自动解码来自服务器的内容。大多数 unicode 字符集都能被无缝地解码。
查看使用的编码
print(r.encoding)
6、获取二进制内容–例如图片、文件等
使用r.content如下:
from PIL import Image
from io import BytesIO
i = Image.open(BytesIO(r.content))
print(i.mode,i.size,i.format)
i.show()
i.save("/imgae/1.png")
i.save(outfile, "JPEG")
PIL (Python Image Library) 是 Python 平台处理图片的事实标准,兼具强大的功能和简洁的 API。
调用i.show()会在图片查看工具中显示当前操作的image对象。
标准版本的show方法的实现不太高效,因为它先把image保存到一个临时文件,然后调用xy工具来显示图像。如果你没有安装xy,那么它就无法工作了。不过如果它可以工作,倒还是非常方便用来debug和测试。
save(filename)用以保存这个临时的image对象img到硬盘。
制作缩略图
try:
im = Image.open(infilepath)
x, y = im.size
im.thumbnail((x//2, y//2))
im.save(outfilepath, "JPEG")
except IOError:
print "cannot create thumbnail for", infile
7、获取json格式的返回值
import requests
r = requests.get('https://api.github.com/events')
print(r.json())
如果 JSON 解码失败, r.json() 就会抛出一个异常。例如,响应内容是 401 (Unauthorized),尝试访问 r.json() 将会抛出 ValueError: No JSON object could be decoded 异常。
需要注意的是,成功调用 r.json() 并不意味着响应的成功。有的服务器会在失败的响应中包含一个 JSON 对象(比如 HTTP 500 的错误细节)。这种 JSON 会被解码返回。要检查请求是否成功,请使用 r.raise_for_status() 或者检查 r.status_code 是否和你的期望相同。
8、获取文件流–下载视频等
原始响应内容
在罕见的情况下,你可能想获取来自服务器的原始套接字响应,那么你可以访问 r.raw。 如果你确实想这么干,那请你确保在初始请求中设置了 stream=True。具体你可以这么做:
r = requests.get('https://api.github.com/events', stream=True)
r.raw
r.raw.read(10)
with open(filename, 'wb') as fd:
for chunk in r.iter_content(chunk_size):
fd.write(chunk)
输出
<requests.packages.urllib3.response.HTTPResponse object at 0x101194810>
r.raw.read(10)
但一般情况下,应该将文本流保存到文件。
9、增加header头
url = 'https://api.github.com/some/endpoint'
headers = {'user-agent': 'my-app/0.0.1'}
r = requests.get(url, headers=headers)
10、post文件模式Multipart-Encoded
url = 'http://httpbin.org/post'
files = {'file': open('report.xls', 'rb')}
r = requests.post(url, files=files)
r.text
显式地设置文件名,文件类型和请求头:
url = 'http://httpbin.org/post'
files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
r = requests.post(url, files=files)
r.text |
|
|
|
|
|