• 图纸下载
  • 专业文献
  • 行业资料
  • 教育专区
  • 应用文书
  • 生活休闲
  • 杂文文章
  • 范文大全
  • 作文大全
  • 达达文库
  • 文档下载
  • 音乐视听
  • 创业致富
  • 体裁范文
  • 当前位置: 达达文档网 > 生活休闲 > 正文

    基于Python的网络爬虫的设计与实现

    时间:2020-07-25 03:45:36 来源:达达文档网 本文已影响 达达文档网手机站

    【摘要】一个爬虫从网上爬取数据的大致过程可以概括为:向特定的网站服务器发出请求,服务器返回请求的网页数据,爬虫程序收到服务器返回的网页数据并加以解析提取,最后把提取出的数据进行处理和存储。因此,一个爬虫程序可以主要分为三大部分:向服务器请求并获取网页数据、解析网页数据、数据处理和存储。

    【关键词】Python;网络爬虫;设计与实现

    一、引言

    随着网络技术的飞速发展,互联网中的信息呈现爆炸式的增长,互联网的信息容量也达到了一个前所未有的高度。为了方便人们获取互联网中的信息,出现了一批搜索引擎。传统的搜索引擎在返回的结果方面有局限性,网络爬虫因此而诞生。网络爬虫又名叫网络机器人,它是一种按照特定规则爬取网页信息的程序。与传统搜索引擎不同,网络爬虫只爬取想要获得的特定类型的信息,进而提高搜索引擎的效率。

    二、Python语言

    Python语言是一种比较常用的开发网址工具,这种语言自身具有非常强大功能。近些年,随着互联网行业的快速发展,各种行业自身都需要拥有自己的网址,这就给Phthon语言的应用提供了很大发展机会。Python语言能够兼容各种不同类型的操作系统。站在网址开发的角度上分析来说Python是属于面向对象语言,这种编程语言能夠在短时间内实现对象编程,Python属于解释性语言,整体通过简单的语法与动态输入有力支持,使得Python逐渐成为各种操作系统平台上常用的脚本语言之一,特别是那些追求高性能的综合应用程序开发过程中Python语言占有重要地位。

    三、获取网页数据

    在Python中,一般爬虫主要是通过一个python的第三方库requests来实现这个过程的,requests库提供了两种发起请求的方法,分别为get()何post(),这也是大部分网站都会实现的两个接口。一般地,get()方法直接通过url参数(有时候还需要请求头参数)便可以发起有效请求;post()方法除此之外还需要一些额外的表单参数,才可以发起有效请求。

    在获取网页数据的这个过程中,常遇到的问题是网站运用了异步加载技术(AJAX)和需要用户登录才可以进入相应的页面。所谓异步加载就是一种通过只和服务器交换少量的每页不同的数据就可以实现页面更新的技术,而不是每次都需要重新加载整个页面,这个可以更小的消耗服务器资源,也更高效快速。

    四、解析网页数据

    当我们获取到网页数据之后,接下来就是对此进行解析并从中提取需要的数据。网站返回的数据格式有三种: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。如果是将数据储存在本地,则需要下载本地数据库,最好也下载数据库图形管理界面方便查看;如果是远程数据库,则同样的最好自己下载好图形界面的数据库管理器以便查看。

    六、基于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-),男,汉族,副教授,恩施职业技术学院教务处,研究方向:计算机软件技术,计算机数据库技术。

    相关热词搜索: 爬虫 设计 网络

    • 生活居家
    • 情感人生
    • 社会财经
    • 文化
    • 职场
    • 教育
    • 电脑上网