发送请求
使用 Requests 发送网络请求非常简单。
一开始要导入 Requests 模块:
>>>importrequests
然后,尝试获取某个网页。本例子中,我们来获取 Github 的公共时间线:
>>>r=requests.get('https://github.com/timeline.json')
现在,我们有一个名为r的Response对象。我们可以从这个对象中获取所有我们想要的信息。
Requests 简便的 API 意味着所有 HTTP 请求类型都是显而易见的。例如,你可以这样发送一个 HTTP POST 请求:
>>>r=requests.post("http://httpbin.org/post")
那么其他 HTTP 请求类型:PUT,DELETE,HEAD 以及 OPTIONS 都是一样的简单:
>>>r=requests.put("http://httpbin.org/put")>>>r=requests.delete("http://httpbin.org/delete")>>>r=requests.head("http://httpbin.org/get")>>>r=requests.options("http://httpbin.org/get")
解析URL中的参数
自定义Headers
对于爬虫来讲,模拟浏览器是发请求的时候做的最多的事情了,最常见的模拟浏览器无非就是伪装headers:
url='http://xlzd.me'In[24]:headers={'User-Agent':'my custom user agent','Cookie':'haha'}In[25]:requests.get(url,headers=headers)
重定向和超时
requests之所以称为“HTTP for human”,因为其封装层次很高,其中一处体现就在:requests会自动处理服务器响应的重定向。
r=requests.get('http://xlzd.me',allow_redirects=False)
有时候对方网站的响应时间太长了,我们希望在指定时间内完事,或者直接停止这个请求,这时候的做法是:
r=requests.get('http://xlzd.me',timeout=3)
timeout表示这次请求最长我最长只等待多少秒
代理
为requests套上一层代理的做法也非常简单:
import requestsproxies = { "http": "http://192.168.31.1:3128", "https": "http://10.10.1.10:1080",}requests.get("http://xlzd.me", proxies=proxies)
会话对象
服务器端通过session来区分不同的用户请求(浏览器会话),requests的会话对象是用来模拟这样的操作的,比如可以跨请求保持某些参数:就像你在访问微博的时候,不需要每次翻页都重新登录一次。
session=requests.Session()session.post('http://xlzd.me/login',data={'user':'xlzd','pass':'mypassword'})# 登录成功则可以发布文章了session.put('http://xlzd.me/new',data={'title':'title of article','data':'content'})