学习爬虫,最基础的便是模拟浏览器向服务器发出请求,可能会觉得需要了解 HTTP、TCP、IP 层的网络传输通信,需要知道服务器的响应和应答原理。Python 的强大之处就是提供了功能齐全的类库来帮助我们完成这些请求。利用 Python 现有的库我们可以非常方便地实现网络请求的模拟,常见的库有 urllib、requests 等。
一、requests库的基本使用
1、安装
首先,requests库是Python的一个第三方库,不是自带的。所以我们需要额外安装。在这之前需要你先安装好Python3环境,如Python3.6版本。安装好 Python3 之后,我们使用 pip3 即可轻松地安装好 requests 库:
pip3 install requests
安装完成之后,我们就可以开始我们的网络爬虫之旅了。
2、实例引入
用Python写爬虫的第一步就是模拟发起一个请求,把网页的源代码获取下来。当我们在浏览器中输入一个URL并回车,实际上就是让浏览器帮我们发起一个GET类型的HTTP请求,浏览器得到源代码后,把它渲染出来就可以看到网页内容了。
Requests 这个库提供了一个 get 方法,我们调用这个方法,并传入对应的 URL 就能得到网页的源代码。
比如这里有一个示例网站:https://static1.scrape.cuiqingcai.com/,这个网站展示了一些电影数据,如果我们想要把这个网页里面的数据爬下来,比如获取各个电影的名称、上映时间等信息,然后把它存下来的话,该怎么做呢?
第一步当然就是获取它的网页源代码了。可以用 requests 这个库轻松地完成这个过程,代码的写法是这样的:
import requests
r = requests.get('https://static1.scrape.cuiqingcai.com/')
print(r.text)
这样就成功获取网页的 HTML 源代码,里面包含了电影的标题、类型、上映时间,等等。把网页源代码获取下来之后,下一步我们把想要的数据提取出来,数据的爬取就完成了。
3、请求
换一个示例网站,其 URL 为 http://httpbin.org/get,如果客户端发起的是 GET 请求的话,该网站会判断并返回相应的请求信息,包括 Headers、IP 等。对于GET请求,我们知道URL后面是可以跟上一些参数的,如果我们现在想添加两个参数,其中name是germey,age是25,URL就可以写成如下内容:http://httpbin.org/get?name=germey&age=25
但如果这些参数还需要我们手动拼接,未免有点不人性化。一般情况下,这种信息我们利用 params 这个参数就可以直接传递了,示例如下:
在这里我们把URL参数通过字典的形式传给get方法的params参数,通过返回信息我们可以判断,请求的链接自动被构造成了:http://httpbin.org/get?age=22&name=germey,这样我们就不用再去自己构造URL了,非常方便。另外,网页的返回类型实际上是str类型,但是它很特殊,是JSON格式的。所以,如果想直接解析返回结果,得到一个JSON 格式的数据的话,可以直接调用 json 方法。实例: