推荐星级:
  • 1
  • 2
  • 3
  • 4
  • 5

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

更新时间:2019-12-24 17:57:37 大小:1M 上传用户:songhuahua查看TA发布的资源 标签:python网络爬虫 下载积分:1分 评价赚积分 (如何评价?) 收藏 评论(0) 举报

资料介绍

本文主要详细介绍如何应用Python语言实现一个多线程的网络爬虫程序,并在此基础上搭建特定的测试网站将串行爬虫程序和多线程爬虫程序的运行效率进行对比,进而给出提高网络爬虫性能的具体方法。


部分文件列表

文件名 大小
基于Python的多线程网络爬虫的设计与实现.pdf 1M

部分页面预览

(完整内容请下载后查看)
安全模型、算法与编程  
基于 Python 的多线程网络爬虫的设计与实现  
◆孙 冰  
(中国石油大学计算机与通信工程学院 山东 266580)  
摘要文主要详细介绍如何应用 Python 语言实现一个多线程的网络爬虫程序在此基础上搭建特定的测试网站将串行爬虫程序和  
多线程爬虫程序的运行效率进行对比,进而给出提高网络爬虫性能的具体方法。  
关键词:Python;网络爬虫;多线程  
0
引言  
重的情况是两个 URL 相互指向对方,如果爬虫程序一直在这两  
个 URL 之间抓取信息,就会形成死循环。因此 URL 管理器有一  
个很重要的作用就是防止重复抓取和循环抓取网页。  
(2)网页下载器  
随着网络技术的飞速发展联网中的信息呈现爆炸式的增  
联网的信息容量也达到了一个前所未有的高度了方便  
人们获取互联网中的信息,国内外出现了一批搜索引擎,如  
Google、百度、Yahoo 等等。这些搜索引擎的特点是能尽量多地  
抓取网页中的信息而容易忽略抓取到的页面的语义和抓取到  
的顺序等索人需要投入大量时间和精力来完成一次检索必  
要时还需要反复组织自己的检索语言达到检索的效果统  
的搜索引擎在返回的结果方面有局限性,网络爬虫因此而诞生。  
网络爬虫又名叫网络机器人是一种按照特定规则爬取网页信  
息的程序传统搜索引擎不同络爬虫只爬取想要获得的特  
定类型的信息,进而提高搜索引擎的效率。  
网页下载器的主要功能把网页对应的 URL 下载到本地,它  
是整个爬虫程序的核心组件页下载器和浏览器相似从互  
联网上下载 URL 对应的网页其内容按照 HTML 的格式下载,  
然后按照本地文件或者本地字符串的形式来存储后再进行后  
续的分析处理。  
(3)网页解析器  
将互联网上的 URL 下载到本地后,需要通过网页解析器对  
该 URL 进行解析才能够提取出所需要的内容。简而言之,网页  
解析器是从网页中提取人们需要的数据的工具一个搜索引擎  
来看,网页解析器首先会将网页中所有的 URL 提取出来,以便  
后续进行访问文所做的是一个定向爬虫了将网页中的待  
爬取的 URL 提取出来之外,还要将所需要和感兴趣的数据提取  
出来是说网页解析器会把网页下载器下载的 HTML 网页文档  
字符串作为输入来提取出需要的内容和未访问过的待爬取的  
URL 列表。  
传统的搜索引擎通常由网页搜集处理和查询这三个模块  
组成网络爬虫就存在于网页搜集这个模块之中络爬虫作  
为搜索引擎[1]的重要组件,它的主要功能就是爬取互联网上各类  
信息络爬虫通常是一个应用程序或者脚本般先给定一个  
入口 URL 地址,从入口 URL 开始根据一定的规则获得这个初始  
网页上的所有 URL,再通过这些新的 URL 如此循环往复获得更  
多的 URL。在这些获取到的 URL 中,按照我们需要信息的规则  
解析该网页,最后再根据不同的需求对获取到的数据进行处理。  
网络爬虫与传统检索方式对比如图 1 所示。  
(4)网页输出器  
网页输出器实际是网页处理的一部分,抓取到网页的数据  
用网页解析器提取出该网页中需要的数据后将这些数  
据写入本地的一个 HTML 文件中果想要对抓取到的数据进行  
其他的处理,就需要修改相应的代码,增加新的功能模块。在本  
课题研究中要是将爬取到的网页内容存储到本地的 HTML 文  
件中页输出器需要对外提供两个方法主要的方法是实现  
写入文件这个功能。  
图 1 网络爬虫与传统检索方式对比图  
理论上任何一种支持网络通信的语言都可以用来编写爬虫  
程序前大多数网络爬虫程序是用后台脚本语言来编写中  
Python 是最为广泛使用的一种语言具有丰富和强大的标准库  
供用户选择使用[2]。  
网络爬虫运行流程如图 2 所示爬虫的总调度程序来启动  
或停止爬虫看爬虫的运行情况爬虫程序中URL 管理器  
用来管理待爬取的 URL 列表和已经爬取过的 URL 列表URL  
管理器中取出一个 URL,判断该 URL 是否被爬取过,如果是未  
被爬取的 URL将这个链接发送到网页下载器载器下载由  
URL 链接指向的网页将下载下来的内容以字符串的形式存储  
下来后会把这个字符串提交到网页解析器网页解析器进  
行解析解析出我们所需要的数据时每个页面中都有指向  
其他页面的链接过网页解析器把它们都解析出来后添到  
URL 管理器中三个部分共同构成了一个循环要有满足条  
件的 URL,程序就一直持续运行。  
1
网络爬虫的设计实现  
本文采用简单的框架结构来编写爬虫程序别有以下四个  
模块[3]:URL 管理器、网页下载器、网页解析器、网页输出器,  
这四个模块共同完成抓取网页的整个过程。  
(1)URL 管理器  
URL 管理器模块的作用是管理待爬取的 URL 集合和已爬取  
过的 URL 集合。每个网页爬取的信息,均包括一些指向其他网  
页的 URL,同样其他网页的信息中也包含指向本网页的 URL,  
因此不同的 URL 之间存在着一种循环指向的问题。如若对它置  
之不理,网络爬虫程序就会在这些 URL 之间循环抓取,比较严  
2
并行爬虫程序的实现  
在串行网络爬虫的基础上,可以实现多线程的网络爬虫程  
序,当爬虫开始执行后,程序向网页发送访问网页的请求,然后  
38‖  
安全模型、算法与编程  
程序等待网页作出响应。等待时间越长,效率也就越低。当程序  
采用多线程时互消息期间的平均等待时间有所降低以提  
高数据抓取的效率。同样给定一个入口 URL,从这个入口 URL  
的网页页面内容之中解析出所有的 URL 链接。如果这些链接没  
有被访问过,增添到待爬取 URL 的队列中,然后再从待爬取的  
URL 列表中取出一条进行访问和解析序中需要增加一段创建  
线程池的代码开始给定一个最大线程数在待爬取的 URL  
列表中取出一个 URL 时就添加一项任务入队列,执行任务时,  
就从队列中出取出一项任务并执行。  
和在不同线程个数下爬虫的运行时间相差不大爬取的网页数  
量为 300 和 500 时线程数量的增加也并没有让运行时间有显著  
性的提高。因此使用多线程的爬虫程序一般也只是在网站规模  
大,爬取的网页数量很多时才会有显著的提升效率的作用。  
选定某一个网页规模观察数据发现线程数增加的时候运  
行的时间没有降低反而增加因为线程之间进行切换也需要耗  
费时间此增加线程数量并不是绝对的提高线程据程序运  
行的环境的不同够提高爬虫程序运行效率的最大线程的个数  
也不相同。  
图 3 特定网页规模下线程数—爬虫运行时间折线图  
4
总结与展望  
通过本文的实验可以得出特定的条件下过增加爬虫  
程序的线程数能够提高网络爬虫的效率是在设置网络爬虫线  
程的时候也要考虑多种因素如说过多线程之间的切换所耗费  
的系统资源以及程序运行时所在网络情况[4] ,而且有的网站会限  
制下载的速度,线程的数量太多时,大量线程访问网页,某些线  
程会被挂起。后期可以考虑在多台服务器上分布式[5] 部署网络爬  
现分布式爬虫之间的通信模式而提高网络爬虫的效率。  
参考文献:  
[1]薛建春.垂直搜索引擎中网络蜘蛛的设计与实现[D].北  
京:中国地质大学检测技术与自动化装置自动检测及应用,  
2007.  
图 2 网络爬虫运行流程图  
[2]姜彬彪, 黄凯林, 卢昱江等.基于 Python 的专业网络爬  
虫的设计与实现[J].企业科技与发展(企业科技创新版), 2016.  
[3][澳] Richard Lawson 著,李斌译.用 Python 编写网络爬  
虫[M].人民邮电出版社, 2016.  
3
实验设计与分析  
网 络 爬 虫 程 序 的 入 口 地 设 定 为  
定程序爬取 1000 个网页  
就停止运行印程序运行的时间串行爬虫程序和多线程爬  
虫程序的运行时间进行对比爬取网页的数量 100300500、  
800、1000 作为横坐标,以爬虫程序的运行时间(单位为 s)作  
为纵坐标,分别画出不同的网页规模下,线程个数分别为 1、3、  
5、8、10、15 的时候运行时间的变化。折线图如图 3 所示。  
从图 3 中可以得出下面几点结论:  
[4]阳国贵, 姜波.线程切换开销分析工具的设计与实现[J].  
计算机应用, 2010.  
[5]王毅桐.分布式网络爬虫技术研究与实现[D].成都:电子  
科技大学信息安全, 2012.  
当爬取的网页数量为 100 的时候行爬虫程序的运行时间  
39‖  

全部评论(0)

暂无评论