目录
概念
1、什么是爬虫
爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来。想抓取什么?这个由你来控制它咯。 比如它在抓取一个网页,在这个网中他发现了一条道路,其实就是指向网页的超链接,那么它就可以爬到另一张网上来获取数据。这样,整个连在一起的大网对这之蜘蛛来说触手可及,分分钟爬下来不是事儿。
2. 浏览网页的过程
在用户浏览网页的过程中,我们可能会看到许多好看的图片,比如 百度图片-发现多彩世界 ,我们会看到几张的图片以及百度搜索框,这个过程其实就是用户输入网址之后,经过 DNS 服务器,找到服务器主机,向服务器发出一个请求,服务器经过解析之后,发送给用户的浏览器 HTML、JS、CSS 等文件,浏览器解析出来,用户便可以看到形形色色的图片了。 因此,用户看到的网页实质是由 HTML 代码构成的,爬虫爬来的便是这些内容,通过分析和过滤这些 HTML 代码,实现对图片、文字等资源的获取。
3.URL 的含义
URL,即统一资源定位符,也就是我们说的网址,统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的 URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
URL 的格式由三部分组成: ①第一部分是协议 (或称为服务方式)。 ②第二部分是存有该资源的主机 IP 地址 (有时也包括端口号)。 ③第三部分是主机资源的具体地址,如目录和文件名等。
爬虫爬取数据时必须要有一个目标的 URL 才可以获取数据,因此,它是爬虫获取数据的基本依据,准确理解它的含义对爬虫学习有很大帮助。
4. 环境的配置
学习 Python,当然少不了环境的配置,最初我用的是 Notepad++,不过发现它的提示功能实在是太弱了,于是,在 Windows 下我用了 PyCharm,在 Linux 下我用了 Eclipse for Python。
安装
利用 pip 安装
1 |
$ pip install requests |
或者利用 easy_install
1 |
$ easy_install requests |
通过以上两种方法均可以完成安装。
引入
首先我们引入一个小例子来感受一下
1 2 3 4 5 6 7 8 |
import requests r = requests.get('http://cuiqingcai.com') print type(r) print r.status_code print r.encoding #print r.text print r.cookies |
以上代码我们请求了本站点的网址,然后打印出了返回结果的类型,状态码,编码方式,Cookies 等内容。 运行结果如下
1 2 3 4 |
<class 'requests.models.Response'> 200 UTF-8 <RequestsCookieJar[]> |
怎样,是不是很方便。别急,更方便的在后面呢。
基本请求
requests 库提供了 http 所有的基本请求方式。例如
1 2 3 4 5 |
r = requests.post("http://httpbin.org/post") 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") |
嗯,一句话搞定。
基本 GET 请求
最基本的 GET 请求可以直接用 get 方法
1 |
r = requests.get("http://httpbin.org/get") |
如果想要加参数,可以利用 params 参数
1 2 3 4 5 |
import requests payload = {'key1': 'value1', 'key2': 'value2'} r = requests.get("http://httpbin.org/get", params=payload) print r.url |
运行结果
1 |
http://httpbin.org/get?key2=value2&key1=value1 |
如果想请求 JSON 文件,可以利用 json () 方法解析 例如自己写一个 JSON 文件命名为 a.json,内容如下
1 2 3 |
["foo", "bar", { "foo": "bar" }] |
利用如下程序请求并解析
1 2 3 4 5 |
import requests r = requests.get("a.json") print r.text print r.json() |
运行结果如下,其中一个是直接输出内容,另外一个方法是利用 json () 方法解析,感受下它们的不同
1 2 3 4 |
["foo", "bar", { "foo": "bar" }] [u'foo', u'bar', {u'foo': u'bar'}] |
如果想获取来自服务器的原始套接字响应,可以取得 r.raw 。 不过需要在初始请求中设置 stream=True 。
1 2 3 4 5 |
r |