基于Python的网络爬虫的设计与实现
作者:高祖彦
来源:《商情》2020年第33期
【摘要】一个爬虫从网上爬取数据的大致过程可以概括为:向特定的网站服务器发出请求,服务器返回请求的网页数据,爬虫程序收到服务器返回的网页数据并加以解析提取,最后把提取出的数据进行处理和存储。因此,一个爬虫程序可以主要分为三大部分:向服务器请求并获取网页数据、解析网页数据、数据处理和存储。 【关键词】Python;网络爬虫;设计与实现 一、引言
随着网络技术的飞速发展,互联网中的信息呈现爆炸式的增长,互联网的信息容量也达到了一个前所未有的高度。为了方便人们获取互联网中的信息,出现了一批搜索引擎。传统的搜索引擎在返回的结果方面有局限性,网络爬虫因此而诞生。网络爬虫又名叫网络机器人,它是一种按照特定规则爬取网页信息的程序。与传统搜索引擎不同,网络爬虫只爬取想要获得的特定类型的信息,进而提高搜索引擎的效率。 二、Python语言
Python语言是一种比较常用的开发网址工具,这种语言自身具有非常强大功能。近些年,随着互联网行业的快速发展,各种行业自身都需要拥有自己的网址,这就给Phthon语言的应用提供了很大发展机会。Python语言能够兼容各种不同类型的操作系统。站在网址开发的角度上分析来说Python是属于面向对象语言,这种编程语言能夠在短时间内实现对象编程,Python属于解释性语言,整体通过简单的语法与动态输入有力支持,使得Python逐渐成为各种操作系统平台上常用的脚本语言之一,特别是那些追求高性能的综合应用程序开发过程中Python语言占有重要地位。 三、获取网页数据
在Python中,一般爬虫主要是通过一个python的第三方库requests来实现这个过程的,requests库提供了两种发起请求的方法,分别为get()何post(),这也是大部分网站都会实现的两个接口。一般地,get()方法直接通过url参数(有时候还需要请求头参数)便可以发起有效请求;post()方法除此之外还需要一些额外的表单参数,才可以发起有效请求。 在获取网页数据的这个过程中,常遇到的问题是网站运用了异步加载技术(AJAX)和需要用户登录才可以进入相应的页面。所谓异步加载就是一种通过只和服务器交换少量的每页不
龙源期刊网 http://www.qikan.com.cn
同的数据就可以实现页面更新的技术,而不是每次都需要重新加载整个页面,这个可以更小的消耗服务器资源,也更高效快速。 四、解析网页数据
当我们获取到网页数据之后,接下来就是对此进行解析并从中提取需要的数据。网站返回的数据格式有三种:HTML、XML、JSON,但是一般我们从网站上爬取到的从服务器中返回的是HTML格式的,有些从网站提供的API返回的数据格式是JSON,下面我们只针对HTML格式的数据进行分析。
要解析HTML格式的数据,python中一般有三种方法,分别对应三个库:BeautifulSoup库、re库、Lxml库。BeautifulSoup库可以很方便的解析Requests库请求的网页,并把网页源代码解析为Soup对象,以便过滤提取数据。BeautifulSoup库除了支持HTML,也支持XML。可以通过该库中的find()、find_all()、selector()方法定位提取需要的数据,其中的参数以及定位原则可以查看文档。
re库是python中关于正则表达式的库,支持全部的正则表达式功能,可以利用该库通过正则表达式来匹配提取HTML文档中的数据。一般可以通过该库中的search()、findall()函数来匹配提取。当然关于正则表达式需要读者额外的去学习,虽然在学习上会比较灵活,但是同时其也是功能相对最强大和效率最高的方法之一。
Lxml是XML解析库,但是对HTML也有很好的支持,该模块使用c语言的python封装,因此解析速度比BeautifulSoup快。Lxml库使用Xpath语法解析定位网页数据,因此读者需要自行学习Xpath语法以便知道如何定位提取数据,学习难度不大,功能也强大。一般利用该库中的etree模块对网页进行解析,然后再利用解析后返回的对象中的xpath()方法结合Xpath语法提取需要的数据。
这三种方法都可以实现对网页数据的解析和提取,但是性能上有差异。一般的,正则表达式和Lxml库的性能较高,但是正则表达式使用难度较大,Lxml一般是比较推荐
的;BeautifulSoup库的性能相对较低,但是使用起来简单,在爬取小规模数据时可以使用。 五、数据处理和存储
数据处理其实没啥多说的,其本身内容庞杂,即用即查,多用多学,但python对数据处理是有先天优势的。数据存储一般取决于数据量的大小,小规模的数据一般以csv的格式储存,这可以利用python的第三方库csv实现,该库的利用也比较简单。对于大规模的数据,则一般储存在数据库里面,无论是关系型数据库还是非关系型数据库,python对这两者主流的数据库都有第三方库的支持。比如对于非关系型数据库MongoDB,python有第三方库pymongo;关系型数据库MySQL,python有第三方库pymysql。如果是将数据储存在本地,则需要下载
龙源期刊网 http://www.qikan.com.cn
本地数据库,最好也下载数据库图形管理界面方便查看;如果是远程数据库,则同样的最好自己下载好图形界面的数据库管理器以便查看。
六、基于Python网络爬虫的实现通过实现任意贴吧的爬虫,并将网页保存到本地,来完成简单的网络爬虫实现
如何实现网页的URL地址爬取,设计思想如下:(1)创建一个Spider类;(2)定义_init_(self,tieba_name)函数,在函数中通过定义一个地址列表self.url_list[]、贴吧名称变量self.tieba_name以及self.headers的初始化,使用循环语句来完成获取完整的URL地址并追加到列表中;(3)定义parse_url(self,url)函数,通过语句response=requests.get(urs,headers=self.headers)来专门发送请求,并获取响应。通过判断发送请求,如果成功,返回responses的值,如果不成功,判断是否为最后一页,如果是,返回“error”,否则返回“None”;(4)义save_html(self,html,page_num)函数来完成网址的保存。
参考文献:
[1]徐远超,刘江华,刘丽珍,等.基于Web的网络爬虫的设计与实现[J].微计算机信息,2007,23(21):119-121.
[2]郭丽蓉.基于Python的网络爬虫程序设计[J].电子技术与软件工程,2017(23):248-249.
作者简介:
高祖彦(1979-),男,汉族,副教授,恩施职业技术学院教务处,研究方向:计算机软件技术,计算机数据库技术。
因篇幅问题不能全部显示,请点此查看更多更全内容