一、前言
爬虫一直是Python的一大应用场景,差不多每门语言都可以写爬虫,但是程序员们却独爱Python。之所以偏爱Python就是因为她简洁的语法,我们使用Python可以很简单的写出一个爬虫程序。本篇博客将以Python语言,用几个非常简单的例子带大家入门Python爬虫。
二、网络爬虫
如果把我们的因特网比作一张复杂的蜘蛛网的话,那我们的爬虫就是一个蜘,我们可以让这个蜘蛛在网上任意爬行,在网中寻找对我们有价值的“猎物”。
首先我们的网络爬虫是建立在网络之上的,所以网络爬虫的基础就是网络请求。在我们日常生活中,我们会使用浏览器浏览网页,我们在网址栏输入一个网址,点击回车在几秒时间后就能显示一个网页。
我们表面上是点击了几个按钮,实际上浏览器帮我们完成了一些了的操作,具体操作有如下几个:
- 向服务器发送网络请求
- 浏览器接收并处理你的请求
- 浏览器返回你需要的数据
- 浏览器解析数据,并以网页的形式展现出来
我们可以将上面的过程类比我们的日常购物:
- 和老板说我要杯珍珠奶茶
- 老板在店里看看有没有你要的东西
- 老板拿出做奶茶的材料
- 老板将材料做成奶茶并给你
上面买奶茶的例子虽然有些不恰当的地方,但是我觉得已经能很好的解释什么是网络请求了。
在知道网络请求是什么之后,我们就可以来了解一下什么是爬虫了。实际上爬虫也是网络请求,通常情况下我们通过浏览器,而我们的爬虫则是通过程序来模拟网络请求这一过程。但是这种基础的网络请求还算不上是爬虫,爬虫通常都是有目的的。比如我想写一个爬取美女图片,我们就需要对我们请求到的数据进行一些筛选、匹配,找到对我们有价值的数据。而这一从网络请求到数据爬取这整个过程才是一个完整的爬虫。
有些时候网站的反爬虫做的比较差,我们可以直接在浏览器中找到它的API,我们通过API可以直接获取我们需要的数据,这种相比就要简单许多。
三、简单的爬虫
简单的爬虫就是单纯的网络请求,也可以对请求的数据进行一些简单的处理。Python提供了原生的网络请求模块urllib,还有封装版的requests模块。相比直线requests要更加方便好用,所以本文使用requests进行网络请求。
3.1、爬取一个简单的网页
在我们发送请求的时候,返回的数据多种多样,有HTML代码、json数据、xml数据,还有二进制流。我们先以百度首页为例,进行爬取:
import requests
# 以get方法发送请求,返回数据
response = requests.get('http://www.baidu.com')
# 以二进制写入的方式打开一个文件
f = open('index.html', 'wb')
# 将响应的字节流写入文件
f.write