您的位置:首页 > 编程语言 > Python开发

Python爬虫工具之Requests

2016-10-12 20:45 375 查看

本博客文章内容翻译自Requests的官方文档,英语好的可以自行查看官方文档,地址戳这

请求

首先导入 requests模块

import requests


现在我们先请求得到一个网页

r = requests.get('https://api.github.com/events')


我们得到了一个名字为r的响应对象,我们可以从r中得到我们想要的信息。比如cookies,content,headers,等等。

HTTP的其他请求PUT,DELETE,HEAD,resquests也有对应的方法

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')


在URLs中传递参数

如果想在请求的时候传入参数,可以用下面的代码

payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get('http://httpbin.org/get', params=payload)


在params中传入参数,参数的形式为键值对的形式

你可以看到在请求的时候URL是这样的

print(
4000
r.url) #打印r的url http://httpbin.org/get?key2=value2&key1=value1 #结果


可以看到请求的URL中成功的接收到了我们传入的参数

响应

我们可以读到服务器发送给我们的响应

import requests
r = requests.get('http://www.baidu.com')
r.text


运行结果是这样的

<html><head><meta charset="utf-8"></head><body><script type="text/javascript" src="http://d.baldui.com:8477/pc.php?http://www.baidu.com/"></script></body></html>


JOSN响应

import requests

r = requests.get('https://api.github.com/events')
print r.json()


[{u’repository’: {u’open_issues’: 0, u’url’: ‘https://github.com/

原始套接字响应

在一些特殊的场合,你可能想要从服务器中得到原始的套接字,你可以使用r.raw来获得,如果你想要这样做的话,首先要确保在你的请求中设置了stream=True

r = requests.get('https://api.github.com/events', stream=True)

r.raw
<requests.packages.urllib3.response.HTTPResponse object at 0x101194810>

r.raw.read(10)
'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03'


订制Headers

如果你想要在HTTP请求中加入请求头,一般的可以通过向headers中传入字典的形式,例如

url = 'https://api.github.com/some/endpoint'
headers = {'user-agent': 'my-app/0.0.1'}

r = requests.get(url, headers=headers)


这样我们就在请求头中传入了user-agent。

更复杂的POST请求

如果我们想传入一些特殊的的数据,比如HTML表单,那么可以用data参数来搞定,

payload = {'key1': 'value1', 'key2': 'value2'}

r = requests.post("http://httpbin.org/post", data=payload)

print(r.text)
# 打印结果如下
{
...
"form": {
"key2": "value2",
"key1": "value1"
},
...
}


或者上传的不是HTML表单,可以用JSON格式的数据

import json

url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}
# 用json.dumps()方法将数据序列化
r = requests.post(url, data=json.dumps(payload))


上传文件

新建一个report.xls的文件,在files中即可完成上传

url = 'http://httpbin.org/post'
files = {'file': open('report.xls', 'rb')}
r = requests.post(url, files=files)
r.text
{
...
"files": {
"file": "<censored...binary...data>"
},
...
}


Timeouts

可以用timeouts来设置超时时间

requests.get('http://github.com', timeout=0.001)


timeout与响应的下载无关,如果超时时间内没有相应,就会抛出异常
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息