Python网络爬虫技术与应用
上QQ阅读APP看书,第一时间看更新

2.1 Python编程

2.1.1 Python的安装与环境配置

Python是一门计算机编程语言。相比于C语言及Java来说,Python更容易上手,同时也十分简单,易懂易用。很多大型网站,例如YouTube、Google等都在大量使用Python,各种常用的脚本任务用Python实现也十分容易,无须担心学非所用。

1.计算机编程语言这么多,为什么用Python来写网络爬虫呢?

(1)对比其他静态编程语言来说,如Java、C#、C++,Python抓取网页文档接口更加简洁;对比其他动态语言Perl、Shell,Python的urllib2包提供非常完整的访问网页文档API。抓住网页有时候需要模拟浏览器的行为,而Python具有很多第三方包,如requests、XPath等均提供此类支持。

(2)对于抓取之后的网页需要进行处理,如过滤标签、提取文本等。Python提供简洁的文档处理功能,可以用很短的代码完成大部分文档处理。

(3)具有各种网络爬虫框架,可方便高效地下载网页。

(4)多线程、进程模型成熟稳定,网络爬虫是一个典型的多任务处理场景,请求页面时会有较长的延迟,总体来说更多的是等待。多线程或进程会更优化程序效率,提升整个系统的下载和分析能力。

2.Python的概念

百度百科解释Python是一种计算机程序设计语言,是一种面向对象的动态类型语言,最初被设计用于编辑自动化脚本(Shell),随着版本的不断更新和语言新功能的添加,Python被越来越多地用于独立的、大型项目的开发。

Python是有名的“龟叔”Guido van Rossum在1989年圣诞节期间,为打发无聊的圣诞节而编辑的一个编程语言。

Python能够提供十分完善的基础代码库,涵盖网络、文件、GUI、数据库、文本等大量内容,被形象地称作“内置电池”。用Python开发,很多功能没必要从零编辑,直接利用现有的即可。

除内置的库外,Python还有大量的第三方库,也就是别人开发的、供直接运用的工具。当然,假如开发的代码经由很好的封装,也能够作为第三方库给别人使用。

很多大型网站都是用Python开发的,例如YouTube、Instagram,还有国内的豆瓣网。很多大公司,包括Google、Yahoo等,乃至NASA(美国航空航天局)都大量地应用Python。

“龟叔”赋予Python的定位是“优雅”“明确”“简短易懂”,所以Python程序看上去总是简短易懂。初学者学习Python,不但初学容易,而且来日深入下去,能够编辑那些十分复杂的程序。

总的来说,Python的哲学便是简短、易懂、优雅,尽可能写出容易看明白的代码,尽可能写少的代码。

3.Python的应用领域

Python拥有很多免费数据函数库、免费Web网页模板系统和与Web服务器进行交互的库,能够实现Web开发,搭建Web框架,目前比较有名气的Python Web框架为Django。同样是解释型语言的JavaScript,在Web开发中的应用已经较为广泛,原因是其有一套完善的框架。但Python也有着特有的优势。例如,Python相比于JS、PHP在语言层面较为完好并且关于同一个开发需求能够提供多种方案,库的内容丰富,使用方便。从事该领域应从数据、组件、安全等多领域进行学习,从底层了解其工作原理并可支配任何业内主流的Web框架。

下面来介绍一下基于Python语言的Web开发中几种常见的Web开发框架。

1)Django

Django是一个常见的Python Web应用框架。它是开源的Web开发框架,包括多种组件,能够实现关系映射、动态内存管理、界面管理等功能。Django开发采用DRY原则,同时拥有独立的轻量级Web服务器,能快速开发Web应用。Django开发遵循MVC模式,包括模型、视图、控制三部分。模型层是应用程序底层,主要用于处理与数据有关的事件,如数据存取验证等。由于Django中用户输入控制模块是由框架处理的,因此也能够称为模板层。模板层用于展现数据,负责模板的存取和正确调用模板等业务。程序员使用模板语言来渲染HTML页面,给模板所需显示的信息,使用既定的模板来渲染结果。视图层组成应用程序的业务逻辑,负责在网页或类似类型的文档中展示数据。

2)CherryPy

CherryPy是基于Python的面向对象的HTTP框架,适合Python开发者。CherryPy本身内置Web服务器。CherryPy的用户无须搭设别的Web服务器,能直接在内置的服务器上运行应用程序。服务器一方面把底层TCP套接字传输的信息转换成HTTP请求,并传递给相应的处理程序;另一方面把上层软件传来的信息打包成HTTP响应,向下传递给底层的TCP套接字。

3)Flask

Flask适合开发轻量级的Web应用。它的服务器网关接口工具箱采用Werkzeug,模板引擎使用Jinja2。Flask使用BSD授权。Flask自身没有如表单验证和数据库抽象层等一些基本功能,而是依附第三方库来完成这些工作。Flask的结构是可扩展的,能够比较容易地为它添加一些需要的功能。

4)Pyramid

Pyramid是开源框架,执行效率高,开发周期短。Pyramid包含Python、Perl、Ruby的特性,拥有不依赖于平台的MVC架构,以及最快的启动开发的能力。

5)TurboGear

TurboGear创建在其框架基础上,它尝试把其框架优秀的部分集成到一起。它允许开发者从一个单文件服务开始开发,慢慢扩大为一个全栈服务。

4.数据分析与处理

通常情况下,Python被用来做数据分析。用C设计一些底层的算法进行封装,而后用Python进行调用。由于算法模块较为固定,所以用Python直接进行调用,方便且灵活,能够根据数据分析与统计的需要灵活使用。Python也是一个比较完善的数据分析生态系统,其中,matplotlib常常会被用来绘制数据图表,它是一个2D绘图工具,有着杰出的跨平台交互特性,日常做描述统计用到的直方图、散点图、条形图等都会用到它,几行代码便可出图。平常看到的K线图、月线图也可用matplotlib绘制。假如在证券行业做数据分析,Python是必不可少的。

随着大数据和人工智能时代的到来,网络和信息技术开始渗透到人类日常生活的方方面面,产生的数据量也呈现指数级增长的态势,同时现有数据的量级已经远远超过目前人力所能处理的范畴。在此背景下,数据分析成为数据科学领域中一个全新的研究课题。在数据分析的程序语言选择上,由于Python语言在数据分析和处理方面的优势,大量的数据科学领域的从业者使用Python来进行数据科学相关的研究工作。

数据分析是指用合适的分析方法对收集来的大量数据进行分析,提取实用信息和构成结论,对数据加以具体钻研和归纳总结的过程。随着信息技术的高速发展,企业的生产、收集、存储数据的能力大大提升,同时数据量也与日俱增。把这些繁杂的数据经由数据分析方法进行提炼,以此研究出数据的发展规律和展望趋向走向,进而帮助企业管理层做出决策。

数据分析是一种解决问题的过程和方法,主要的步骤有需求分析、数据获得、数据预处理、分析建模、模型评价与优化、部署。下面分别介绍每个步骤。

1)需求分析

数据分析中的需求分析是数据分析环节中的第一步,也是十分重要的一步,决定后续的分析方法和方向。主要内容是根据业务、生产和财务等部门的需要,结合现有的数据情况,提出数据分析需求的整体分析方向、分析内容,最终和需求方达成一致。

2)数据获得

数据获得是数据分析工作的基础,是指按照需求分析的结果提取、收集数据。数据获得主要有两种方式:网络爬虫获得和本地获得。网络爬虫获得是指经由网络爬虫程序合法获得互联网中的各种文字、语音、图片和视频等信息;本地获得是指经由计算机工具获得存储在本地数据库中的生产、营销和财务等系统的历史数据和实时数据。

3)数据预处理

数据预处理是指对数据进行数据合并、数据清洗、数据标准化和数据变换,并直接用于分析建模的这一过程的总称。其中,数据合并能够把多张互相关联的表格合并为一张;数据清洗能够去掉重复、缺失、异常、不一致的数据;数据标准化能够去除特征间的量纲差异;数据交换则能够经由离散化、哑变量处理等技术满足后期分析与建模的数据要求。在数据分析过程中,数据预处理的各个过程互相交叉,并没有固定的先后顺序。

4)分析建模

分析建模是指经由对比分析、分组分析、交叉分析、回归分析等分析方法,以及聚类模型、分类模型、关联规则、智能推荐等模型和算法,发现数据中的有价值信息,并得出结论的过程。

5)模型评价与优化

模型评价是指对于已经创建的一个或多个模型,根据其模型的类型,使用不同的指标评价其性能好坏的过程。模型的优化则是指模型性能在经由模型评价后已经达到要求,但在实际生产环境应用过程中,发现模型的性能并不理想,继而对模型进行重构与优化的过程。

6)部署

部署是指把数据分析结果与结论应用至实际生产系统的过程。根据需求的不同,部署阶段可以是一份包含现状具体整改措施的数据分析报告,也可以是把模型部署在整个生产系统的解决方案。在多数项目中,数据分析员提供的是一份数据分析报告或者一套解决方案,实际执行与部署的是需求方。

Python是一门应用十分广泛的计算机语言,在数据科学领域具有无可比拟的优势。Python正在逐步成为数据科学领域的主流语言。Python数据分析具备以下几方面优势:

(1)语法简短、易懂、精练。对于初学者来说,比起其他编程语言,Python更容易上手。

(2)有很多功能强大的库。结合在编程方面的强大实力,只使用Python这一种语言就能够去构建以数据为中心的应用程序。

(3)不单适用于研究和构建原型,同时也适用于构建生产系统。研究人员和工程技术人员使用同一种编程工具,能给企业带来明显的组织效益,并降低企业的运营成本。

(4)Python程序能够以多种方式轻易地与其语言的组件“粘接”在一起。例如,Python的C语言API能够帮助Python程序灵活地调用C程序,这意味着用户能够根据需要给Python程序添加功能,或者直接使用Python语言,不要调用API接口。

(5)Python是一个混合体,丰富的工具集使它介于系统的脚本语言和系统语言之间。Python不但具备全部脚本语言简短易懂和易用的特点,还拥有编译语言所具有的高级软件工程工具。

Python具有IPython、NumPy、SciPy、Pandas、Matplotlib、Scikit-learn和Spyder等功能齐全、接口统一的库,能为数据分析工作提供极大的便利。

5.人工智能应用

人工智能的核心算法是完全依赖于C/C++的,由于是计算密集型,因此需要十分致密的优化,还需要GPU、专用硬件之类的接口,这些都只有C/C++能做到。所以在某种意义上,其实C/C++才是人工智能领域最主要的语言。Python是这些库的API Binding,使用Python是因为C-Python的胶水语言特性,要开发一个其语言到C/C++的跨语言接口用Python是最容易的,比其语言门槛要低不少,尤其是使用C-Python的时候。

说到AI,Python已经逐步成为一些AI算法的一部分,从最开始的简短易懂的双人游戏到后来复杂的数据工程任务。Python的AI库在现今的软件中充当着不可取代的角色,包括NLYK、PyBrain、OpenCV和AIMA,一些AI软件功能,短短的一个代码块就足够。再看人脸识别技术、会话接口等领域,Python正在一步步覆盖更多新领域。可以说,Python未来的潜力是不可估量的。

在人工智能的应用方面,例如在神经网络、深度学习方面,Python都能够找到比较成熟的包来加以调用。并且Python是面向对象的动态语言,且适用于科学计算,这就使得Python在人工智能方面颇受喜爱。虽然人工智能程序不限于Python,但仍然为Python提供大量的API,这也正是由于Python当中包含着较多的适用于人工智能的模块,如sklearn模块等。调用方便、科学计算功能强大依旧是Python在AI领域最强大的竞争力。

6.Linux系统下Python的安装

1)创建路径

首先创建一个Pyhton的安装路径,命令如下,创建安装路径结果如图2-1所示。

    rm -rf /usr/local/python3
    sudo mkdir /usr/local/python3
    su root
    chmod 777 /usr/local/python3

图2-1 创建安装路径结果

创建完成后进入该文件夹中,命令如下,结果如图2-2所示。

    cd /usr/local/python3

图2-2 进入该文件夹

2)下载安装包

进入该文件夹后,下载安装包到当前路径文件夹中,Linux系统能够使用wget命令来执行,代码如下,下载进度如图2-3所示。

    wget --no-check-certificate https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz

3)解压安装包

在当前文件夹下解压,代码如下:

    tar -xzvf Python-3.6.5.tgz

图2-3 下载进度

4)编译安装

进入该Python 3.6.5文件中进行编译安装,代码如下:

    #进入解压完的文件夹
    cd Python-3.6.5
    #编译
    sudo ./configure --prefix=/usr/local/python3
    #安装
    make
    make install
    #如在编译过程报错可使用这条命令解决
    sudo apt-get install build-essential

5)创建链接

在编译与安装完成后,再创建Python 3的软链接,代码如下:

    sudo ln -s /usr/local/python3/bin/python3  /usr/bin/python3

这时会报错,显示failed to create symbolic link '/usr/bin/python3':File exists:无法创建符号链接'/usr/bin/python3':文件存在,这时使用rm删掉相同名称的链接便可,代码如下,创建软链接结果如图2-4所示。

    rm -rf /usr/bin/python3

图2-4 创建软链接结果

6)测试Python 3是否可用

在终端窗口中输入Python 3查看是否可用。进入Python 3后如图2-5所示。

图2-5 进入Python 3

7)安装setuptools

在安装pip之前,需要先安装setuptools,它是一组Python的distutilsde工具的增强工具,能够让程序员更方便地创建和发布Python包,特别是那些对其他包具有依赖性的情况。当需要安装第三方Python包时,可能会用到easy_install命令。使用easy_install命令实际上是在调用setuptools来完成安装模块的工作。

首先下载软件包,与安装Python类似,使用wget来进行下载,代码如下,下载setuptools如图2-6所示。

    cd /usr/local/python3
    wget https://pypi.python.org/packages/source/s/setuptools/setuptools-19.6.tar.gz

图2-6 下载setuptools

8)解压并安装setuptools工具,代码如下:

    #解压软件
    tar -zxvf setuptools-19.6.tar.gz
    cd setuptools-19.6
    #编译并安装
    python3 setup.py build
    python3 setup.py install

9)开始安装pip

使用wget直接从官网拉取软件包,代码如下,下载pip包如图2-7所示。

    cd /usr/local/python3
    wget --no-check-certificate https://pypi.python.org/packages/source/p/pip/pip-10.
0.1.tar.gz

图2-7 下载pip包

之后安装pip包,代码如下:

    #下载完后进行解压
    tar -zxvf pip-10.0.1.tar.gz
    #解压完成后进入文件夹中进行编译和安装
    cd /usr/local/python3/pip-10.0.1
    python3 setup.py build
    #安装pip
    sudo apt-get install python3-pip

10)测试pip是否安装成功

使用pip安装一个Python包,成功则表示pip安装成功,如报错或者没有显示,则可使用更新机制,代码如下,测试pip是否安装成功如图2-8所示。

    #验证pip3安装是否成功
    pip3 install ipython
    #查看pip3的版本
    pip3 -V
    #安装lxml包
    pip3 install lxml
    #升级pip
    sudo pip3 install --upgrade pip

图2-8 测试pip是否安装成功