基于大数据环境下Python的爬虫技术的应用

2020-09-10 08:25许会芳
看世界·学术上半月 2020年12期
关键词:爬虫网页页面

许会芳

摘要:大数据背景下,无法使用常规的工具进行数据挖掘、处理和管理数据,但每个行业每天都有大量的数据产生,如何得到这些数据,就需要有新处理方式才具有更强的处理能力、优化能力来处理浩瀚的数据。现在网络上的很多数据都是杂乱的,都需要挖掘、清洗、分析,整理后,才能满足实际的运用,虽然现在有很多优秀的搜索引擎,但是还是不能满足各行业对数据的捕捉、搜索等要求。目前,使用网络爬虫工具能自动完成数据挖掘,清洗等工作,很大程度上提了工作效率。

关键词:原理;爬虫;数据分析

中图分类号:TP96             文献标识码:A

一、相关概念及原理

(一)大数据技术

“大数据”一词指的是不断增长的大型数据集,其中包括异构格式:结构化、非结构化和半结构化数据。大数据具有复杂性,需要强大的技术和先进的算法。因此,传统的静态商业智能工具在大数据应用中已不再有效。大多数数据科学家和专家对大数据的定义主要有以下三个特征(称为3Vs):①Volume:海量的数字数据不断地从数以百万计的设备和应用程序(智能手机、产品代码、社交网络、传感器、日志等)中生成。McAfeeetal.(2012)估计2012年每天大约产生2.5艾字节[1]。这个数字大约每40个月翻一番。2013年,据一家国际数据公司发布的研究报告估计,创建、复制和使用的数字数据总量为4.4Zettabytes(ZB),每两年翻一番。到2015年,数字数据增长到8ZB(Rajaraman,2016)。根据IDC(Internetdatacenter)的报告,到2020年,数据量将达到惊人的40Zeta字节,是当前数据量的400倍。②Velocity:数据生成速度快,需要快速处理,提取有用信息和相关知识。例如,沃尔玛(一家国际折扣零售连锁企业)每小时从客户交易中产生2.5PB以上的数据。YouTube也是一个展示大数据快速发展的好的案例。③Variety:大数据来源于分布式的各种来源,以多种格式(如视频、文档、评论、日志等)产生[2]。大数据集包括结构化和非结构化数据、公共或私有数据、本地或远程数据、共享或机密数据、完整或不完整数据等。Emanietal.(2015)和GandomiandHaider(2015)指出,为了更好地定义大数据,一些参与者加入了更多Vs等特征:Vision(目的),Verification(处理后的数据符合某些规范),Validation(目标可实现),Value(许多领域的相关信息可以提取),Complexity(由于数据关系的演变,很难组织和分析大数据)和Immutability(如果管理得当,收集和存储大数据可以是永久性的)。

(二)爬虫技术

网络爬虫,是按照设定的规则自动抓取网络信息的程序。网页中包含了文字信息、超链接信息。从功能上来讲,爬虫的处理过程一般包括数据采集、处理、储存三个部分。在网络爬虫的系统框架中,主过程由控制器、解析器、资源库三部分组成。控制器的主要工作是负责给多线程中的各个爬虫线程分配工作任务。解析器的主要工作是下载网页,进行页面的处理,主要是将一些JS脚本标签、CSS代码内容、空格字符、HTML标签等内容处理掉,爬虫的基本工作由解析器完成。资源库用来存放下载到的网页资源,一般都采用大型的数据库存储。网络爬虫技术分为以下几类:通用网络爬虫、聚焦网络爬虫、增量网络爬虫、深层网络爬虫。这几种爬虫的关键技术是類似的。爬虫获取网络数据的方式:模拟浏览器发送请求,获取网页代码——提取有用数据,解析内容,保存数据。

Python程序类似于蜘蛛,在每个节点上捕捉猎物。通用爬虫暨通用的网络爬虫也可以称为可伸缩的网络爬虫,有两种常见的爬取策略:深度优先策略及广度优先策略。而聚焦爬虫也被称为主题网络爬虫,主要为特定的人群提供服务,可以节省大量的服务器资源和带宽资源;增量爬虫则是指以增量方式更新已下载网页并仅对新生成或更改的网页进行爬取的爬虫程序,可以在一定程度上保证被爬取的页面是尽可能新的。与周期性的抓取和刷新相比,增量爬虫只在需要时对新生成或更改的页面进行抓取,不再下载未更改的页面,可以有效减少数据下载量,及时更新抓取的页面,减少时间和空间消耗,但也增加了爬行算法的复杂度和实现难度。增量爬虫的体系结构包括爬行模块、排序模块、更新模块、本地页面集、要爬行的URL集和本地页面URL集。本文采用的增量网页爬虫进行发送请求、获取响应内容、解析内容及保存数据[3]。

(三)Python技术

Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。它是解释型语言,但是也可以编译成.pyc跨平台的字节码文件。.pyc文件有几个好处:一是可以简单地隐藏源码,二是提高载入速度,三是跨平台。相较于C++、Java语言,Python更易于学习,有一个广泛的标准库。同时可以结合Java或C/C++语言,封装成Python可以调用的扩展库,便于扩展和移植。Python提供了非常丰富的针对网络协议的标准库,能简单高效地进行网页抓取、网页解析、数据存储等,使程序员可以集中精力处理程序逻辑。

二、常用网络爬虫技术

(一)通用爬虫技术

通用网络爬虫又称为全网爬虫,其爬行对象由一批种子URL扩充至整个网站,这种爬虫适合搜索的内容广泛,目前主要是由Web服务提供商或搜索引擎使用。常见的策略有:一是深度优先:根据目标的深度由低到高依次访问每一级网页的链接,直到访问完为止;二是广度优先:根据目标内容目录结构的深浅来提取,首先提取比较浅层次的页面,在同一层的数据全部提取完以后,再进入下一层进行提取。

(二)聚焦网络爬虫技术

聚焦网络爬虫又被称作主题网络爬虫,其最大的特点是只选择性地爬行与预设的主题相关的页面。常见的策略有:一是根据用户需求内容的爬行:这种策略是将用户输入的关键词作为查找的主题,包含有查询关键词的页面被认为是与用户查找的目标相关的页面;二是链接结构评价的爬行策略:该种策略将包含很多结构信息的半结构化文档Web页面用来评价链接的重要性,其中一种广泛使用的算法为PageRank算法;三是语境图的爬行:这种策略是通过学习各个网页之间的关连度,计算出当前页面与其它相关的页面的距离,选择距离越近的页面进行优先访问。

(三)增量式的爬虫技术

增量式爬虫是在已经保存网站部分数据的情况下,当再次运行爬虫的时候,它不会对已有的数据重复爬取,只爬取数据库中尚未保存的数据。常有更新方法有以下几种:一是统一更新:用相同的频率获取所有网页的数据,不因网页改变影响访问的频率;二是个体更新法:这种方法是根据面页内容的变化而改变访问的频率;三是分类更新法:根据网页变化频率,将网页划分为快、慢两个类别,根据不同类别设定不同的访问频率。

(四)深层网络爬虫技术

Web页面按照存在方式可以分为表层页面和深层页面两类。表层页面指以传统搜索引擎可以索引到的页面,深层页面中的大部分数据不能通过静态链接方式获取,隐藏于表单之后,需要提交搜索主题词之后才能得到相应的页面。

三、项目分析、设计、测试与实现

(一)项目分析

1.项目描述

项目为编写一个网站爬虫程序,将豆瓣读书网站上的所有图书信息爬取下来,并保存到MySQL数据库中。爬取的信息字段要求有:ID号、书名、作者、出版社、原作名、译者、出版年、页数、定价、装帧、丛书、ISBN、评分、评论人数。

2.爬取网站过程分析

第一步:打开豆瓣读书首页https://book.douban.com/。

第二步:在豆瓣读书首页的右侧点击“所有热门标签”,会跳到豆瓣图书标签页https://book.douban.com/tag/?view=type&icn=index-sorttags-all。

第三步:点击豆瓣图书标签页分类中的标签,会展示对应图书列表页,在图书列表页中可以获取每本图书的详细信息。

3.项目设计

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。

项目主要分为四大模块。模块一实现对豆瓣图书信息以及所有标签信息的爬取,并将图书的标签信息写入到Redis数据库中,此模块可使用Requests简单实现。模块二负责从Redis中获取每个图书标签,分页式地爬取每本图书的URL信息后,将信息写入到Redis中。模块三负责从Redis中获取每个图书的URL地址,并爬取对应的图书详情,将每本图书详情信息写回到Redis数据库中。模块四负责从Redis中获取每本图书的详情信息,并将信息依次写入到MySQL数据中,作为最终的爬取信息。该项目结构图如图1所示。

(二)项目部分实现

1.定义model类

编辑myweb/web/models.py

https://book.douban.com/

classBooks(models.Model):

title=models.CharField(max_length=255)#书名

author=models.CharField(max_length=64)#作者

......

binding=models.CharField(max_length=32)#装帧

series=models.CharField(max_length=128)#丛书

isbn=models.CharField(max_length=128)#ISBN

score=models.CharField(max_length=128)#评分

number=models.IntegerField(default=0)#评论人数

2.URL路由配置

fromdjango.conf.urlsimporturl,include

urlpatterns=[

url(r’^’,include(‘web.urls’)),

]

創建Web子路由文件:myweb/web/urls.py,并编写代码如下:

fromdjango.conf.urlsimporturl

from.importviews

urlpatterns=[

url(r’^$’,views.index,name=”index”),

url(r’^/$’,views.index,name=”index”),

]

(三)编写视图文件部分代码

defindex(request):

#获取商品信息查询对象

mod=Books.objects

list=mod.filter()

#执行分页处理

pIndex=int(request.GET.get(“p”,1))

page=Paginator(list,50)#以50条每页创建分页对象

maxpages=page.num_pages#最大页数

#判断页数是否越界

ifpIndex>maxpages:

pIndex=maxpages

ifpIndex<1:

pIndex=1

list2=page.page(pIndex)#当前页数据

plist=page.page_range#页码数列表

(四)项目测试

启动服务测试,$pythonmanage.pyrunserver使用浏览器访问测试,抓取部分信息的效果图如图2所示。本系统的设计和实现面向定向网站的网络爬虫程序,经过测试,能满足不同的性能要求,且抓取效果良好。

四、结语

文章对互联网网站的信息进行爬取并展示,并对一些网站的反爬技术使用对应的反反爬策略,不仅不增加网站服务器的压力,还提高了爬取的效率和稳定性;并且遵守了网站的Robots协议。在大数据时代,爬虫行业必将风生水起,Python网络爬虫更是独领风骚。基于Python的Web爬虫数据抽取是一种主流技术,Python语言具有跨平台、开发速度快、语言简单等特点。Python语言可以通过第三方请求库获取返回值的内容,然后通过正则、XPath和BeautifulSoup三种Python过滤技术快速匹配和提取网页中的图像和文本数据,这样不仅能精确地找到网页中需要的数据,还能自动化快速地将这些数据保存下来,极大地减少了查找数据的时间。基于Python的网络爬虫不仅爬取速度快,其语言的简洁性也大大地缩短了完成爬取的时间。

参考文献:

[1]曾诚.基于Python的网络爬虫及数据可视化和预测分析[J].信息与电脑(理论版),2020,32(09):167-169.

[2]杨雄.基于Python爬虫的比赛信息查询交流系统设计[J].无线互联科技,2020,17(09):45-46.

[3]裴丽丽.基于Python语言对电影影评数据爬虫与词云制作[J].信息记录材料,2020,21(05):116-118.

猜你喜欢
爬虫网页页面
答案
基于Python的网络爬虫和反爬虫技术研究
让Word同时拥有横向页和纵向页
Python反爬虫设计
基于Scrapy框架的分布式网络爬虫的研究与实现
基于HTML5静态网页设计
谁抢走了低价机票
搜索引擎怎样对网页排序
驱动器页面文件大小的总数为何总是07
网页智能搜索数据挖掘的主要任务