其实在python中还有自带的urllib, urllib2, urllib3,而request是国外程序开发的第三方库,至于他们的关系嘛,urllib和urllib2是相互独立的关系,而request则使用了urllib3,其优点是多次请求重复使用一个socket,你想三次握手多麻烦,建立一个socket复用当然能提高效率不是。
当然了,使用这些的基础是对http协议要有一定的认识最好,没有的话只要你对发信收信的过程有一个概念就可以了。
所需:
pip install virtualenv(可选)
pip install request
pip install gunicorn
话不多说show you the code:
- urllib2
其实在我的豆瓣爬虫中就使用过urllib2,有兴趣的可以移步瞅一眼
#coding=utf-8
import urllib2
import urllib
url = "http://httpbin.org/ip"
geturl = "http://httpbin.org/get"
def urllib2test():
response = urllib2.urlopen(url)
#响应头信息
print "====responseheaders===="
print response.info()
#响应体
print "====responsbody===="
print ''.join([item for item in response.readlines()])
def urllibget():
params = urllib.urlencode({'param1': 'hello','param2': 'world'})
response = urllib2.urlopen('?'.join([geturl, '%s'])%params)
#响应头信息
print "====responseheaders===="
print response.info()
#响应体
print "====responsbody===="
print ''.join([item for item in response.readlines()])
if __name__ == "__main__":
urllib2test()
urllibget()
这是一个简单的urllib2的使用,我们可以对其响应部分像读取文件一样操作
[item for item in response.readlines()]是序列推导式,相当于:
result = [];
for item in response.readlines():
result.append(item)
-
运行结果
python 的request库
在使用request时,就简单了:
#coding="utf-8
import requests
ipurl = "http://httpbin.org/ip"
geturl = "http://httpbin.org/get"
def printinfo(res):
print ">>>>headers"
print res.headers
print ">>>>code"
print res.status_code
print ">>>>boyd"
print res.text
print ">>>>jsondata"
print res.json()
response1 = requests.get(ipurl)
printinfo(response1)
params = {'param1':'hello','param2':'world'}
response2 = requests.get(geturl, params = params)
printinfo(response2)
*运行结果:
python 的request库
使用requests和github通信
#coding="utf-8"
import json
import requests
URL = 'https://api.github.com'
def build_uri(endpoint):
return '/'.join([URL,endpoint])
def better_print(json_str):
return json.dumps(json.loads(json_str), indent = 4)
def request_method():
response = requests.get(build_uri('users/hopevow'))
print better_print(response.text)
if __name__ == '__main__':
request_method()
运行结果
python 的request库
总结
- 带参数的请求
GET
request.get(url, params={'key1':'value1'}
POST
request.post(url, data = {'key1':'value1})
JSON参数提交
request.post(url, json={'key1':'value1'})
网友评论