Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1662929
  • 博文数量: 695
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 4027
  • 用 户 组: 普通用户
  • 注册时间: 2013-11-20 21:22
文章分类

全部博文(695)

文章存档

2018年(18)

2017年(74)

2016年(170)

2015年(102)

2014年(276)

2013年(55)

分类: Python/Ruby

2016-02-25 22:39:58

request 果然方便啊 甩urllib urllib2 好几条街
一、安装
s  = requests.Session()  然后使用s.post 以后多次发送请求使用同一个cookies
二、发送无参数的get请求

点击(此处)折叠或打开

  1. >>> r = requests.get('')
  2. >>> print r.text
  3. {
  4.   "args": {},
  5.   "headers": {
  6.     "Accept": "*/*",
  7.     "Accept-Encoding": "gzip, deflate",
  8.     "Connection": "close",
  9.     "Host": "httpbin.org",
  10.     "User-Agent": "python-requests/2.3.0 CPython/2.6.6 Windows/7",
  11.     "X-Request-Id": "8a28bbea-55cd-460b-bda3-f3427d66b700"
  12.   },
  13.   "origin": "124.192.129.84",
  14.   "url": ""
  15. }

三、发送带参数的get请求,将key与value放入一个字典中,通过params参数来传递,其作用相当于urllib.urlencode

点击(此处)折叠或打开

  1. >>> import requests
  2. >>> pqyload = {'q':'杨彦星'}
  3. >>> r = requests.get('',params = pqyload)
  4. >>> r.url
  5. u'?q=%E6%9D%A8%E5%BD%A6%E6%98%9F'
四、发送post请求,通过data参数来传递,

点击(此处)折叠或打开

  1. >>> payload = {'a':'杨','b':'hello'}
  2. >>> r = requests.post("", data=payload)
  3. >>> print r.text
  4. {
  5.   "args": {},
  6.   "data": "",
  7.   "files": {},
  8.   "form": {
  9.     "a": "\u6768",
  10.     "b": "hello"
  11.   },
  12.   "headers": {
  13.     "Accept": "*/*",
  14.     "Accept-Encoding": "gzip, deflate",
  15.     "Connection": "close",
  16.     "Content-Length": "19",
  17.     "Content-Type": "application/x-www-form-urlencoded",
  18.     "Host": "httpbin.org",
  19.     "User-Agent": "python-requests/2.3.0 CPython/2.6.6 Windows/7",
  20.     "X-Request-Id": "c81cb937-04b8-4a2d-ba32-04b5c0b3ba98"
  21.   },
  22.   "json": null,
  23.   "origin": "124.192.129.84",
  24.   "url": ""
  25. }
  26. >>>
可以看到,post参数已经传到了form里,data不光可以接受字典类型的数据,还可以接受json等格式
>>> payload = {'a':'杨','b':'hello'}
>>> import json
>>> r = requests.post('', data=json.dumps(payload))
五、发送文件的post类型,这个相当于向网站上传一张图片,文档等操作,这时要使用files参数
>>> url = ''
>>> files = {'file': open('touxiang.png', 'rb')}
>>> r = requests.post(url, files=files)
5.1 定制headers,使用headers参数来传递

点击(此处)折叠或打开

  1. >>> import json
  2. >>> url = ''
  3. >>> payload = {'some': 'data'}
  4. >>> headers = {'content-type': 'application/json'}
  5.  
  6. >>> r = requests.post(url, data=json.dumps(payload), headers=headers)
六、响应内容

6.1 响应状态码

r = requests.get('')
print r.status_code
6.2 响应头 
>>> print r.headers
也可以取到这个个别的响应头用来做一些判断,这里的参数是不区分大小写的

r.headers[‘Content-Type’]

r.headers.get(‘Content-Type’)

6.3 响应内容,前面已经在应用了

r.text

r.content

七、获取响应中的cookies

点击(此处)折叠或打开

  1. >>> r = requests.get('')
  2. >>> r.cookies['BAIDUID']
  3. 'D5810267346AEFB0F25CB0D6D0E043E6:FG=1'
也可以自已定义请求的COOKIES

点击(此处)折叠或打开

  1. >>> url = ''
  2. >>> cookies = {'cookies_are':'working'}
  3. >>> r = requests.get(url,cookies = cookies)
  4. >>>
  5. >>> print r.text
  6. {
  7.   "cookies": {
  8.     "cookies_are": "working"
  9.   }
  10. }
  11. >>>
cookies还有很多,因为目前我也还不是很多,以后再扩充吧

八、使用timeout参数设置超时时间

>>> requests.get(', timeout=1)

如果将时间设置成非常小的数,如requests.get(', timeout=0.001),那么如果在timeout的时间内没有连接,那么将会抛出一个Timeout的异常

九、访问中使用session

先初始化一个session对象,s = requests.Session()
然后使用这个session对象来进行访问,r = s.post(url,data = user)


参考文章 http://blog.csdn.net/iloveyin/article/details/21444613 基本上都是从这扒的代码

以下通过访问人人网来获取首页中的最近来访问,然后再访问查看更多的来访来读取更多的最近来访

更多的来访就是以带session的访问


点击(此处)折叠或打开

  1. #coding:utf-8
  2. import requests
  3. import re
  4.  
  5. url = r''
  6.  
  7. user = {'email':'email','password':'pass'}
  8. s = requests.Session()
  9. r = s.post(url,data = user)
  10.  
  11. html = r.text
  12. visit = []
  13. first = re.compile(r'(.*?)')
  14. second = re.compile(r'(.*?)')
  15. third = re.compile(r'(.*?)')
  16. last = re.compile(r'(.*?)')
  17. visit.extend(first.findall(html))
  18. visit.extend(second.findall(html))
  19. visit.extend(third.findall(html))
  20. visit.extend(last.findall(html))
  21. for i in visit:
  22.     print i
  23.  
  24. print '以下是更多的最近来访'
  25. vm = s.get('')
  26. fm = re.compile(r'"name":"(.*?)"')
  27. visitmore = fm.findall(vm.text)
  28. for i in visitmore:
  29.     print i
转自:
http://my.oschina.net/yangyanxing/blog/280029?fromerr=74yBvzpB
官网:

阅读(1358) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~