爬虫快速入门
requests
参考资料
1 快速入门
在requests中,它会使用urllib3来自动完成Keep-alive和自动保持HTTP连接等功能。
- 使用
requests.get(url)
即可发送一个get请求 - 使用
requests.post(url,data={key,value})
可以发送一个POST请求。
同理,put,delete,head与options都可以这样发送。
传递参数
有时会需要向URL的查询字符串中传递某种数据。如果是手工构建的话,需要向URL中插入键值对,并进行转码,例如httpbin.org/get?key=val
在requests中,可以使用params参数进行,例如payload = {'key1': 'value1', 'key2': 'value2'}
,r = requests.get("http://httpbin.org/get", params=payload)
。
也可以将多个值用列表形式传入:
>>> payload = {
'key1': 'value1', 'key2': ['value2', 'value3']}
>>> r = requests.get('http://httpbin.org/get', params=payload)
>>> print(r.url)
http://httpbin.org/get?key1=value1&key2=value2&key2=value3
定制请求头
如果需要添加HTTP头部,则要传递一个dict给对应方法的headers参数,比如需要指定content-type
时:
>>> url = 'https://api.github.com/some/endpoint'
>>> headers = {
'user-agent': 'my-app/0.0.1'}
>>> r = requests.get(url, headers=headers)
header的值必须是string、bytestring或者unicode。但是不建议传递unicode header
传递复杂的POST请求
比如表单之类的,需要传递一个字典给data参数:
>>> payload = {
'key1': 'value1', 'key2': 'value2'}
>>> r = requests.post("http://httpbin.org/post", data=payload)
>>> print(r.text)
{
...
"form": {
"key2": "value2",
"key1": "value1"
},
...
}
如果是同一个key下的多个元素,可以使用元组列表:
>>> payload = (('key1', 'value1')