基于Python的网络爬虫技术

2018-04-16 07:11辽宁师范大学计算机与信息技术学院
电子世界 2018年16期
关键词:爬虫队列网页

辽宁师范大学计算机与信息技术学院 陈 乐

1 引言

当今时代是大数据的时代,各个领域都离不开数据的支持。快速搜索数据并且充分利用数据信息,成为了一个巨大的挑战。为了解决这些难题,网络爬虫技术应运而生。使用网络爬虫技术可以快速提取数据,提高数据检索质量。

2 网络爬虫技术

2.1 网络爬虫技术的基本概念

网络爬虫又称网络蜘蛛,或者网络机器人。它是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。[1]换句话来说,它可以根据网页的链接地址自动获取网页内容。如果把互联网比做一个大蜘蛛网,它里面有许许多多的网页,网络蜘蛛可以获取所有网页的内容。

2.2 网络爬虫架构

网络爬虫架构主要由三个部分组成:网络爬虫调度端(负责开启网络爬虫主程序);网络爬虫主程序;目标数据(抓取有价值数据)。

网络爬虫主程序分为3个部分:

(1)Url管理器:管理Url,包括已经爬取过的Url和待爬的Url。

(2)网页下载器:根据Url地址,将网页下载保存到本地,存储为字符串。

(3)网页解析器:将存储的字符串中有价值的数据进行解析。

2.3 网络爬虫架构流程

爬虫系统调度段询问Url管理器,从一个Url或者多个Url开始,将他们放在“待抓取”的Url队列中,系统按照一定的顺序从队列中取出Url地址,将其传送给网页下载器并下载网页内容,调度端接收到网页下载的内容后,将网页内容发送给网页解析器,抓取想要的内容。[2]在抓取的过程中,爬虫还会碰到Url,在已经下载的Url队列中检查,如果没有被抓取过,确认是新的Url,则放到Url队列末尾,等待抓取。上面过程是循环往复进行的,直到“待抓取”的Url队列为空,停止抓取。

3 基于Python的网络爬虫分析

3.1 Python语言的优越性

(1)方便简单,容易上手。Python几乎能在所有的操作系统上运行,很容易上手,初学者可以快速适应。

(2)Python是一个广泛使用的脚本语言,其自带了urllib、urllib2等爬虫最基本的库,可以抓取Url的内容。[3]

(3)Python擅长处理字节流的各种模式,具有很好的开发速度。

3.2 Python网络爬虫模块

3.2.1 Url管理模块

Url管理模块的作用是管理Url,包括已经被抓取的Url集合和还未被抓取的Url集合。Url管理模块可以有效预防重复抓取循环抓取的问题。

Python中实现网址管理有三种途径:

(1)存储在内存中,针对于Url数据较少的情况。在Python中用Set()集合加以实现,Set()可以消除重复数据,避免重复抓取的问题。

(2)存储在关系数据库,实现永久存储。建立Url表,该表中有两个字段,一个字段是Url地址,另一个字段用来表示Url是否被抓取。

(3)存储在缓存数据库redis中,针对于Url数据较多的情况下。也可以用Set()集合来实现,来存取“待爬”的Url地址和“已爬”的Url地址。

3.2.2 网页下载器

网页下载器将Url对应的网页下载到本地,将其存储为字符串,以便接下来对数据进行处理。

Python支持的网页下载工具有两种:

Python自身携带的urllib2模块。urllib2针对于简单的网络爬虫,能够完成网页下载,提交用户数据,代理访问,客户登录等多种功能。

下面是简单的网络爬虫代码(以百度为例):

import urllib2

response.urllib2.urlopen(“http://www.baidu.com”)

print response.read()

在这个例子中,我们首先调入urllib2库中的url.open()方法,传送百度的url,返回一个response对象,调入response对象的read()方法,返回获取的网页内容,并打印.。

第三方工具包—request,request的功能比较强大,属于第三方插件。

3.2.3 网页解析器

网页解析器用来从网页中提取从最初想要的数据。实则上提取的是两部分:(1)Url列表;(2)目标数据。

Python中的网页解析器有两种类型:

(1)利用正则表达式。正则表达式将网页当作字符串来处理,只适用于简单的网页。一般网页较为复杂时,不采用此类方法。

(2)基于网页的DOM结构。DOM树是一种树形标签结构。网页解析器会将HTML文档当成DOM树,对其进行上下级结构的遍历来提取有用信息。使用树形结构可以对网页中的具体信息来进行定位,定位到具体的某个节点、属性等。其中BeautifulSoup解析器功能强大,更为盛行。BeautifulSoup利用find_all()和find()方法来搜索节点,find_all()可以查找所有符合查询条件的标签节点,并返回一个列表。find()方法查找符合查询条件的第一个标签节点。用这两种方法搜索节点,提取有价值信息。

4 结语

在大数据时代,网络爬虫技术可以有效准确地抓取目标数据,可以为我们节省大量的资源,对信息检索起着十分重要的作用。基于Python的网络爬虫技术,具有很高的前瞻性,有一定的研究价值。

猜你喜欢
爬虫队列网页
利用网络爬虫技术验证房地产灰犀牛之说
基于Python的网络爬虫和反爬虫技术研究
队列里的小秘密
基于多队列切换的SDN拥塞控制*
在队列里
基于CSS的网页导航栏的设计
丰田加速驶入自动驾驶队列
基于URL和网页类型的网页信息采集研究
大数据环境下基于python的网络爬虫技术
网页制作在英语教学中的应用