58囱魁科技2021年•第2期
基于Pythori的网络爬虫系统的
设计与实现分析
◊新疆交通职业技术学院李文华
本文首先对Python与网络爬虫的概念进行了简要阐释,并分析了基于Python的
网络爬虫系统的基本原理;其后从关键设计原则与模块结构设计角度入手,提出了
基于Python的网络爬虫系统的设计思路;最后对基于Python的网络爬虫系统的编程
实现进行了研究。
在”互联网+”的新时代中,大数据技术、人工智能技术、应用程序技术等现代科技与现代社会的融合关系日益紧密。在此背景下,Pytho厘渐从编程语言领域中脱颖而出,以其低成本、低难度、开放化、简洁化等特点受到了人们的青睐与好评,并长期占据各大编程语言排行榜的领先地位。据此,我们有必要对基于Python的网络爬虫系统的设计与实现展开探究讨论。
1基于Python的网络爬虫系统的基本原理
网络爬虫亦称"网页追逐者”或“网页蜘蛛”,是一种基于预设规则进行网络信息自动抓取的程序工具。现阶段,网络爬虫还可根据应用功能的不同,分化为全网爬虫、聚焦爬虫、增量爬虫、深层爬虫等多个种类,并在搜索引擎搭建、网络信息检索、网络数据分析等领域发挥着重要作用。从基本结构来看,网络爬虫系统主要由页面采集模块、页面解析模块、连接处理模块等部分组成,其应用运行的主要流程为:首先,对待爬取的目标网站进行确定,并从已给定的初始URL链接中提取出一个,对该链接上的信息内容进行分析采集,最终储存到数据库当中。其后,将网站中未经访问的链接纳入到待爬行列表当中,按照特定顺序逐个进行链接页面的提取、访问、分析、采集、储存。最后,在循环执行爬行动作并达到程序预设的停止条件时,网络爬虫系统即可自动终止运行%
在此基础上,网络爬虫系统还可根据URL链接爬行路线的不同,分为递归网络爬虫与非递归网络爬虫两种。其中,前者为单一性的线程设计,即在同一动作周期中只能对一个链接进行分析处理;后者则为多线程设计,即以URL队列为运行支持,按照“初始URL链接-等待队列-运行队列F误队列/完成队列-完成URL爬行”的流程执行网络爬行任务。在此过程中,若判定某URL链接在信息采集的过程中出现下载错误、爬行失败的情况,将会将该URL链接加入到错误队列中,该队列的URL链接将不会参与后续系统循环。
编程中国
Python是目前应用最广泛的计算机编程语言之一,其本身携带有requests、bs4、pyspider等多个基础库,可为网络爬虫系统的代码编写与结构搭建提供优质环境条件。因此,以Python为基 础进行网络爬虫系统的设计与实现,具有良好的可行性与适应性。
2基于Python的网络爬虫系统的设计思路
2.1基于Python时网络爬虫系统的关键设计原则
为了实现Python编程语言下网络爬虫系统的顺利产出,并确 保网络爬虫系统在实际投用中的高效可靠、合法合规,相关人员在设计实践中应遵循以下几点关键设计原则。
第一,可行性原则。众所周知,互联网中的数据信息具有海量化特点,若采取全网爬虫的系统设计方式,将会形成大量不必要的时间浪费与成本损耗。所以,相关人员在正式开展设计实践之前,必须要明确网络爬虫系统的应用目标与爬行对象,以此实现网络爬虫系统爬取信息主题、爬行动作范围的精准确定,保证网络爬虫系统在设计完成后具有高度的应用可行性。同时,还需做好URL链接过滤机制、评价标准的合理设置,以进一步确保网络爬虫系统设计与实现的“有的放矢”。
第二,避险性原则。在目前,为了保护网页信息,很多网站会设计出一定的“反爬取”机制,进而导致网络爬虫系统在运行过程中出现异常,不仅难以达到预期的网络信息采集效果,还会对爬虫系统本身的
爬取有效性产生影响。例如,一些网页会依托动态技术构建出“爬虫陷阱”。当网络爬虫系统在此类网络中执行信息爬取任务时,该URL链接的地址H历会发生频繁更改,进而导致网络爬虫系统循环往复地登入同一个地址,陷入到重复抓取、无法跳出的境地当中。在基于Python的网络爬虫系统设计当中,为了防止此类情况出现,相关人员务必要贯彻落实避险性原则,对反爬取的陷阱风险进行提前感知、预先防范。例如,可设置出网络爬虫系统对同一网站的最大抓取次数,当网络爬虫系统在单一网页中重复抓取信息的次数超过预设限值,该任务就会主动结束,从而使网络爬虫系统及时跳出陷阱网页,转而进行URL队列中其他链接的信息爬取叫第三,合理性原则。在网络爬虫系统的应用实践中,会涉及到一种名为“robots”的安全协议,其对爬取行为具有约束性作用。当网络爬虫系统作用于某一网站时,会首先访问该网站的文本,以得知该网站中不被允许搜索采集的具体内
技术创新59
容,或网络爬虫系统被赋予的有限权限。然后,网络爬虫系统便可依据协议内容,实施有选择、有约束的信息爬取行为。同理,若网络爬虫系统在爬取某网站时,并未检测到文本存在,也就意味着该网站的所有信息均处于无协议保护的状态,网络爬虫系统可进行自由无拘的采集活动。基于此,由于robots在本质上是网站与网络爬虫系统之间的一种通俗协议,而非强制性的规定。所以,相关设计人员应将文本的检测与约束机制纳入到设计过程中,以保证网络爬虫系统投用运行的合理性与礼貌性。
2.2基于Python的网络爬虫系统的模块结构设计
在实践中,相关人员可以如图1的网络信息爬取流程为基础,进行网络爬虫系统总体结构的设计。具体来讲,应包含系统调度、URL链接管理、网页下载、网页解析、数据储存、robots管理、线程管理以及风险处理A个功能部分。
第一,系统调度模块为网络爬虫系统的"头脑”,主要负责其他功能模块的调度控制与指令管理。在系统运行的过程当中,系统调度模块应与其他模块持续建立反馈连接,当某一模块的动作结束后,系统调度模块可同步向下一环节模块发出驱动指令,以推动网络信息爬取流程的进展,直至满足预设程序的全部条件,即爬取任务完全结束。
第二,URL链接管理模块主要作用于网络爬虫系统涉及到的所有URL链接,如待爬取URL链接、已爬取URL链接、新URL链接对象等。
第三,网页下载模块为网络爬虫系统获取网页信息的工具,当网络爬虫系统进入到URL链接的网页界面后,网页下载模块会自动启动下载功能,对HTML、XML、JSON等多种数据文件进行下
第四,网页解析模块位于网页下载模块后端,当网络爬虫系统获取到网页中的海量数据信息后,网页解析模块可对数据信息进行去噪处理,从而实现冗余性文件的有效剔除,仅保留用户所需的相关数据。
第五,数据存储模块主要作为计算机存储空间与网络爬虫系统的连接纽带。当目标信息采集、处理完成后,数据存储模块即可对数据信息的类型进行判断。若数据具备结构化特点,则将其导入到数据库当中;若数据为非结构化,则将其直接导入计算机的本地硬盘。在此基础上,再辅以简洁合理的索引机制,即可满足已爬取信息的检索利用需求。
第六,robots管理模块主要用于检测、下载与更新目标网站的文本文件,并对robots文本中的允许访问目录或限制访问目录进行感知。当系统调度模块获得robots管理模块的信息反馈后,即可按照相应权限进行爬取指令的下达,以保证网络爬虫系统的运行边界持续处在网站允许范围内,从而将网络爬虫系统的信息爬取行为维持在较高的合理性与礼貌性水平当中。
第七,线程管理模块主要用于多线程的网络爬虫系统,相关人员在设计时,应保证系统线程具备良好的灵活性,即用户可根据具体的URL链接数量进行线程数调整,以确保网络爬虫系统运行资源的有效分配,达成较高网络爬虫系统的网络信息爬取效率。
第八,风险处理模块主要是为了应对各类反爬取机制而形成的。在基于Python的网络爬虫系统设计中,相关人员应制定出多种风险处理方案,如爬虫陷阱循环访问风险的有效规避、同一URL链接下网站内容的变更适应等,并落实到Python语言的代码编程当中。
3基于Python的网络爬虫系统的实现研究
源程序和源代码
virtual agent在运行流程、模块结构设计完成后,相关人员即可依托Python开发平台,进行网络爬虫系统的开发实现。具体来讲,各类模块的实现策略如下所示。
第一,系统调度模块的实现。在Python开发环境中建立初始模块"_mam_",并在该模块中建立Spidennain类。然后,按照图1的系统运行流程,开放信息爬区目标选定、系统参数设置、导入、URL链接提取、目录检査、页面信息下载、页面信息解析、爬取信息储存等环节模块的调度权限。最后,对各项模块参数进行初始化,即可正式启动网络爬虫系统。
第二,URL链接管理模块的实现。以Python开发平台的set去重功能为基础,创建出“已爬取”与“待爬取”两个URL队列。然后,使用set的pop算法,对待爬取队列中的URL队列进行随机选取,以此作为网络爬虫系统下一环节的信息爬取目标%
第三,网页下载模块的实现。依托request^础库的urlopenl具,对目标网页中的数据信息进行下载获取。在此基础上,可进一步设置headers代码,从而在实现网页下载功能的同时,将网络爬虫系统的行为伪装为浏览器访问,以进一步提高信息获取的成功几率。
第四,网页解析模块的实现。在Python平台中,网页解析模块可依托Beautiful Soup基础库以及lxml?®析器进行搭建实现。其程序代码包括"soup=BeautifulSoup(data,"lxml")"、<<urls=soup.find_all('a',href=repile(pattem[,flag])"等。
第五,数据存储模块的实现。数据存储模块在网络爬虫系统与MySQ谨据库之间建立连接,实现爬取信息向pymysql模块的导入。其程序代码包括”sql=”insert into、table('dataT,'data2',、data3')values(%s,%s,%s)"、"init()"等。
第六,其他功能模块的实现。线程管理、风险处理等其他模块可依托Python平台的threading、谱基础库实现。
4结语
总而言之,在利用Python编程语言及开发平台进行网络爬虫系统的设计与实现时,相关人员需要充分考虑到网络爬虫系统复杂多样的功能需求,以及其在应用过程中可能遇到的陷阱风险、robots协议等问题,继而设计出功能完善的模块结构方案与系统运行流程,并付诸于编程实践当中,以确保网络爬虫系统可行性、避险性、合理性等原贝啲充分体现。(下转26页
)
26內魁科技2021年•第2期
阀14流向消音器,最终排向大气。因为脱水再生流程的气流最终向大气,故吸干机存在气耗量。
3鼓风热再生吸附式压缩空气干燥机
鼓风热再生吸附式压缩空气干燥机也属于吸附式压缩空气干燥机的一种,利用吸附
剂对水分子的亲和作用除
去多余的水,但是有略有
异步电动机的优缺点是什么不同。鼓风热吸干机利用
鼓风机抽取环境空气经过
加热后去对干燥塔的吸附
剂进行再生,大大减少了
成品气的消耗,如图3所示
为鼓风热吸干机的工作原
理,可大致分为三步,即
吸附再生阶段、冷吹阶段
以及均压阶段。由于均压
图3鼓风热吸千机原理图
过程只是在冷吹完成之后进制转换方法的口诀字母
让两个吸附塔内的压力保持一致,在很短的一瞬间完成,本文不作详细的介绍。
(1)吸附再生阶段。湿空气从入口处经1号阀门流向A塔进行吸附,经5号阀门排出。同时鼓风机抽取环境空气经1皤阀门流向电加热器,加热之后具有高温的空气经8号阀门对B塔进行再生,同时将吸附剂里的水分再走由K12排出,而再生气流通过4号阀门排向大气。吸附再生阶段的再生气由鼓风机从环境抽取,最后排向大气,故无气量消耗,最大程度地节约了能量。
(2)冷吹阶段。A塔吸附过程同吸附再生阶段一致,这里不再过多的赘述。不同的是在出口处取部分成品气经嗨阀门流向电加热器(此时的电加热器处于关闭状态,只相当于一个管道),再经由8号阀门对B塔进行冷吹,冷吹之后由4号阀门把气体排向大气。这一过程虽然有气量消耗,但其消耗量远小于吸附XEE缩空气AOL,适用于要求再生耗气量小的场合。
4压缩热再生吸附式压缩空气干燥机
压缩热再生吸附式压缩空气干燥机本质上也属于吸干机的一种,但从结构上也区别于吸干机,其与吸干机最大的区别在于首先利用空压机排出的高温气体对其中一塔的吸附剂进行加热再生,除去吸附剂中多余的水分,然后进行冷吹和均压。根据有无成品气的消耗将其分为有气耗压缩热再生吸附式干燥机和零气耗压缩热再生吸附式干燥机。压缩热吸干机的功能原理也大致分为三步:吸附再生阶段、冷吹阶段以及均压阶段。
4.1有气耗压缩热吸附式压缩空气干燥机
(1)加热再生阶段。如图4所示,经空压机排出的高温气体经由阀门9流向A塔,首先对其进行加热再生,排出多余的水分;再通过阀门3进入后部冷却器和气液分离器进行降温和排水,再通过10号阀门流向
B塔,B塔对压缩空气进
行吸附处理,融12号阀
门将空气排出得到成品
气。
(2)冷吹阶段。压
缩空气经过阀门7直接进
入后部冷却器和气液分离
器进行降温处理,排出多
python解析json文件余的水分,再由10^■阀门
进入B塔进行吸附处理,
最后经由12号阀门排出。与加热再生阶段不同的是,冷吹阶段需在出口处经由17号阀门取部分成品气流经13号阀门对A塔进行冷吹,冷吹气由14号阀门排出。
4.2零气耗压缩热吸附式压缩空气干燥机
如图5所示为零气耗压缩热吸附式压缩空气干燥机的工作原理图,与有气耗相比最直接的区别在于零气耗压缩热吸干机有两个冷却器和分离器。以A塔再生B塔吸附为例:
(1)加热再生阶段。空压机排出的高温气体经过1号阀门进入A塔进行加热再生,经过2号阀门和3号阀门
进入冷却器和分离器排出多余的水分再通过4号阀门进入B塔进行吸附处理,最后由5号阀门排出。
(2)冷吹阶段。高温空气首先进入冷却器和分离器进行冷却,再通过6号阀门和2号阀门对A塔进行冷吹,经过7号阀门进入第二个冷却器和分离器再次进行冷却,通过4号阀门进入B塔进行吸附处理,最后经5号阀门排出。
图5零气耗鼓风热吸干机
【参考文献】
[1]洪川.压缩空气干燥工艺技术研究[J].科技创新导报,2019(6): 92
[2]上海御诺制冷设备工程有限公司.一种制冷式压缩空气净化干燥机:中国,201220751855.4[P].2012-12-28
(上接59页)
【参考文献】
[1]钟机灵.基于Python网络爬虫技术的数据采集系统研究Q].信息通信,2020(04):96-98
[2]洪伟.分布式网络爬虫系统设计与实现[D].沈阳理工大学,2020
[3]杨国志,江业峰.基于python的聚焦网络爬虫数据采集系统设计与实现U].科学技术创新,2018(27):73-74
作者简介:李文华(1984-),女,汉族,山东德州人,本科,助教,研究方向:计算机科学与技术