Python 爬虫教程 3 - 使用 requests

来源:互联网 发布:c罗进球数据 编辑:程序博客网 时间:2024/04/25 23:27

上一篇文章讲了什么是 HTTP 协议,而这次我将告诉你如何使用 Python 通过 HTTP 来获取互联网上的资源。

什么是 requests

简单的来讲 requests 是一个简单易用的 HTTP 客户端程序,由 Python 社区大牛 Kenneth 发起。所以 requests 到底是干什么的呢?往简单了想,你可以把它当作一个程序使用的浏览器(当然我们所使用的浏览器很多功能它都没有,比如不能自动载入图片,不能自动运行 js 等等),但是作为一个程序客户端来说它足够通用,在爬虫里我们使用它来获取在互联网上的各种资源。
requests 的使用十分简单,比如你想要获得 http://www.baidu.com 所对应的资源,只需要简单的调用 get 方法,可以看到返回的是一个 html 文档字符串,你可以将这个巨大的字符串拷贝到单独的文件中,再用浏览器打开,就可以得到一个类似百度首页的页面了。

>>> import requests>>> res = requests.get('http://www.baidu.com')>>> print res.text<!DOCTYPE html><!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8>...</div> </body> </html>

一些简单的示例

requests 是一个第三方库,所以需要用 pip 进行安装。在使用 requests 之前,需要先导入模块

>>> import requests

对应于 HTTP 的不同动词,可以直接调用模块里同名函数发送 HTTP 请求。

>>> get_res = requests.get('http://www.baidu.com/') # GET 方法>>> post_res = requests.post('http://www.baidu.com/') # POST 方法

getpost 应该是我们最常用的两个函数了,也是 requests 库的核心,除了 URL 这个参数之外,它们还接受其他参数,下面介绍其中最常用的两个:
params,字典类型,通过这个参数传递需要附带的参数,使用 GET 方法的话也就是我们常在 URL 问号后面看到的那些参数。

>>> params = {'wd': 'hello'}>>> res = requests.get('http://www.baidu.com/', params=params)

headers,字典类型,同样的我们可以通过 headers 参数对请求的首部进行定制。

>>> headers = {'accept': 'text/html', 'user-agent': 'Safari/10.0.1'}>>> res = requests.get('http://www.baidu.com/', headers=headers)

那要如何获得服务器返回的 HTTP 响应呢,每一个请求函数都会返回一个响应对象,可以通过这个响应对象获取 HTTP 响应的一切信息。
比如可以获得返回的报文内容

>>> res = requests.get('http://www.baidu.com/')>>> res.text # 字符串形式数据>>> res.json # 以 json 格式对数据进行解码>>> res.content # 二进制数据

获得状态码,判断请求执行的状态

>>> res. status_code200

获得响应头,以供进一步使用,你的结果应该和我类似

>>> res. headers{'Content-Encoding': 'gzip', 'Transfer-Encoding': 'chunked', 'Set-Cookie': 'BDORZ=27315; max-age=86400; domain=.baidu.com; path=/', 'Server': 'bfe/1.0.8.18', 'Last-Modified': 'Mon, 23 Jan 2017 13:27:44 GMT', 'Connection': 'Keep-Alive', 'Pragma': 'no-cache', 'Cache-Control': 'private, no-cache, no-store, proxy-revalidate, no-transform', 'Date': 'Fri, 10 Feb 2017 06:36:54 GMT', 'Content-Type': 'text/html'}

接下来是什么

除了上面所说的内容,requests 还有许多更多更强大的功能,包括 HTTP 认证,文件上传,HTTPS 加密等,你可以在官网获得全面而详细的资料。

参考资料
1. requests 中文官网 http://cn.python-requests.org/zh_CN/latest/

0 0