目录
学渣讲爬虫之Python爬虫从入门到出门第一讲
目录
爬虫的常用形式
爬虫的基本原理
前期准备
简单爬虫
爬虫实例
爬虫的常用形式
生活学习中,我们可能常常会遇到一些需要获取某类特定资源的情况,比如:
需要若干包含某些个关键词的论文
需要某个行业的数据以用于机器学习或理论分析
需要某支股票的长期走势以决定是否要入股
需要大量针对某个商品的评论以决定是否要下单
需要大量针对某部电影的影评以决定是否要跟朋友去观看
···
这时候,爬虫便是我们快速获取这些资源的一条有效途径。
网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。(定义源自百度百科 - “网络爬虫”)
通俗的说,爬虫就是一个自动化的机器人软件,按照设定去获得你想要的互联网数据,并且整个抓取的过程都是自动完成的。我们所熟知的百度和谷歌两大搜索引擎的实质也就是爬虫,它们会不间断的爬取互联网上存在的和新出现的内容,并以某种形式存储到自己的数据库中。
爬虫的基本原理
开始-浏览网页-解析网页-下载数据-存储数据-清洗数据-结束。
浏览网页:就如同我们人浏览网页一样,爬虫需要先向目标地址发起请求,然后等待目标页面内容全部加载;
解析网页:一张网页由许许多多的内容构成,不只是文字,还有图片、音频、视频、HTML代码、CSS样式表、JS脚本等各种元素,为此,需要一定的规则来定位到我们所需要的具体某个\些元素;
下载数据:在解析出我们需要的部分后,便可以将其下载并暂时存储到内存中;
存储数据:下载出来的数据可能远不止一个,而内存的空间有限且宝贵,我们需要用到数据库或其他形式来将下载的数据分类且长期存储,以便于后面的数据清洗、查找等各种操作;
清洗数据:下载的数据可能会包含一些无效的、有错的内容,为此需要对这些内容进行清洗,只保留对我们有价值的东西。之所以将清洗放在存储后,是因为这里主要是对已经下载的内容进行处理,需要大量的I\O操作,而爬虫主要过程由CPU来调度,我们都知道主存的读写速度远高于辅存的读写速度,这一步如果放在存储前面,会极大的限制爬虫的效率。
前期准备
Python版本简介
因为本教程主要以Python为实现爬虫的语言,因此需要安装Python。Python主要分为Python 2.X和Python 3.X两大阵营,这两大版本有很多不一样,虽然有很多模块还使用2.X这个版本,但也有许多模块渐渐退出了对2.X的更新和支持,未来还是以3.X版本为主流,大部分以2.X为版本的模块也都有了3.X的版本,包括官方的标准库和第三方库,因此推荐使用3.X版本进行开发。本教程也以Python 3为开发语言。
Python的安装:
Python的官方网站为:https://www.python.org/;
截止本文发布,Python的最新版本为Python 3.6.4,出于稳定性和第三方模块支持的考虑,我选择安装一个较为稳定且兼容性较好的版本Python 3.5.2;
根据安装包的提示下一步下一步就可以安装成功了,在安装界面上有个”Add Python3.5 To Path”的复选框,勾选变可以自动配置环境变量,如果没有勾选,也可以手动配置,步骤如下;
(上一步如果勾选了复选框则这一步开始可以跳过)
以安装路径为”C:\Program Files (x86)\Python35-32\”为例,这里将这个路径复制,然后在桌面找到”此电脑”图标,右键,选择属性,打开”系统面板”,如图(出于安全角度已将计算机信息覆盖)
点击左侧红色框中的”高级系统设置”,打开”系统属性”面板,如图
点击下方的”环境变量”按钮,打开”环境变量”面板,如图(同样出于安全角度将变量值覆盖)
在下方”系统变量”里找到变量名为”Path”的变量,双击或点击红色框里的编辑按钮,打开”编辑环境变量”面板,如图(同样出于安全角度将变量值覆盖)
点击右边红色框里的”新建”按钮,在左侧光标处输入刚才复制的值”C:\Program Files (x86)\Python35-32\”,再点击一次新建,输入值”C:\Program Files (x86)\Python35-32\Scripts\”,然后一路确定,直至回到”系统”面板,如图(同样出于安全角度将变量值覆盖)
打开”CMD”命令行,输入python,如果出现类似于如图的结果
则表示配置Python的环境变量成功。
Python 3.5.2安装包会自动安装Python包管理工具”pip”,这个工具提供了对Python包的查找、下载、安装和卸载功能,因为爬虫的开发需要用到多个Python第三方库,所以需要用pip对这些包进行集中管理,方便又快捷。打开命令行,输入pip,如果显示类似于如图的结果
则表示pip已经成功安装,如果没有成功安装pip,则可以使用如下方法:
下载get-pip.py文件,打开命令行,切换到”get-pip.py”文件的存储位置,输入命令python get-pip.py,python就会自动安装pip工具。
推荐开发Python的专业IDE——PyCharm,虽然收费较贵,但是真的很强大很专业,大学生可以申请学生认证,免费使用一年Professional版,每年需要验证一次,建议使用校园邮箱进行认证,方便且审核快。
简单爬虫
前期准备已经全部完成,开始正式进入到Python爬虫的世界。
前面我们已经讲到,爬虫大致分为浏览网页、解析网页、下载网页、存储数据、清洗数据这几个步骤,首先联想我们以人的角度上网,一般是先打开浏览器,输入想要浏览的URL(统一资源定位器),通俗的说就是网址,然后在页面上发现我们喜欢的东西,比如一段文字,然后我们就将这段文字复制下来,新建一个TXT文件或者Doc文件,将复制的内容粘贴上去,保存。那么作为一种编程语言,如何用代码来实现这一全部过程呢?这时候就需要用到几个Python的第三方库了。
首先我们来介绍第一个模块——Requests
Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用。Requests 允许你发送纯天然,植物饲养的 HTTP/1.1 请求,无需手工劳动。你不需要手动为 URL 添加查询字串,也不需要对 POST 数据进行表单编码。Keep-alive 和 HTTP 连接池的功能是 100% 自动化的,一切动力都来自于根植在 Requests 内部的 urllib3。(解释源自python-requests.org)
通俗的说,”Requests”是Python的一个HTTP模块,用来进行HTTP请求,并获得响应结果。就好比我们用浏览器访问百度,这其中就包含了一个HTTP请求,即计算机向百度的服务器发出访问请求,百度服务器经过权限审核后通过了这条请求,并返回了百度首页的HTML代码及其他相关文件,文件在浏览器中组合生成我们所看到的页面。那么Requests就是用来发送这条请求并接受返回的结果的。
Requests模块的安装便由前面所讲到的pip工具来完成,几乎所有的非标准模块(第三方模块)都可以这样安装。以管理员权限打开CMD命令行,这里一定要用管理员权限,尤其是Python安装在C盘的童鞋,因为系统的保护机制,所以C盘的写入需要最高级的权限。运行命令pip install requestes(r小写),如要获得源码,也可参考http://cn.python-requests.org/zh_CN/latest/user/install.html#pip-install-requests。
爬虫实例
以爬取百度首页为例,我们写一个简单的爬虫:
# -*- coding: utf-8 -*-
mport requests
url = 'http://www.baidu.com' # 注释1
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' # 注释2
}
response = requests.get(url=url, headers=headers) # 注释3
content = response.content.decode() # 注释4
print(content) # 注释5
注释1:这里写的是URL,即所谓的网址
注释2:访问网址的时候HTTP请求的头文件里都会包含一个User-Agent,这个关键字的解释如下
User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。(解释源自百度百科 - “用户代理”)
在爬虫里,UA就好比一张通行证,通过伪装UA标识,可以让某些爬虫检测机制将你的爬虫当做一个用浏览器访问其网页的自然人,在错误的判断下,便不对这个爬虫进行反爬虫的操作(关于反爬虫在后面的文章里我会仔细说明)。当然要真正的达到”通行”的目的,可能要做的远不止如此。
headers就是刚才所说的HTTP请求里的头文件,如果将UA比喻成通行证,那么headers就是你的爬虫的档案,它包含了访问者的设备信息,语言信息,编码信息,请求来源信息等各种内容,它同样可以伪装,让你的爬虫变成一个”清白”的访问者,从而让服务器返回正确的内容,爬虫顺利的爬取各种想要的资源。UA是这个档案里的一条内容。
通常情况下,在获取某些get请求的内容而非post请求的内容时,我们只需要将UA修改成一般浏览器的UA就好了,无需增加其他关键字,而UA的获取将在后面的文章进行讲解。
注释3:response便是通过向目标服务器进行请求后获得的响应对象,它作为一个对象,包含了服务器的响应的全部内容,就好比派遣一个间谍去获得敌人的内部资料,间谍得手后成功返回,所有的资料都保存在间谍的身上,那么这个间谍就是这个响应对象,我们可以从间谍口中得到任何想知道的内容。(比喻可能不太准确)
注释4:我们将从响应对象那里得到的内容保存在名为content的变量里,response.content,这里的content是响应对象的一个属性,用来返回响应包含的内容,有可能是一段HTML代码,也可能是一段文字,一张图片,一首音乐,但都是以bytes型也就是二进制的形式存在,这里因为返回的是一段HTML代码,因此我们将其解码,使用到decode()方法,将bytes型转变为str型,结果如下:
图中的便是百度首页的源代码了。
注释4:最后输出如上图的结果
一个简单的爬虫大概就这样完成了,但这里可能还不能真正体现爬虫的便捷和自动化,我将在第二章开始讲解较为复杂的爬虫。
网友评论