APP下载

基于Python爬虫技术的网页解析与数据获取研究

2020-04-10温娅娜袁梓梁何咏宸黄猛

现代信息科技 2020年1期
关键词:网络爬虫

温娅娜 袁梓梁 何咏宸 黄猛

摘  要:網络的发展,大数据、人工智能的崛起使数据变得尤为重要,各行各业的发展都需要数据的支持,任何一种深度学习以及算法中都需要大量的数据作为模型来训练才能得出较为准确的结论。文中讨论了网络爬虫实现过程中的主要问题:了解网页基本结构、使用直观的网页分析工具对网页进行抓包分析、如何使用正则表达式获取准确的字符串信息、利用Python实现简单的页面数据获取。

关键词:网络爬虫;Python;正则表达式;抓包分析

中图分类号:TP391.3      文献标识码:A 文章编号:2096-4706(2020)01-0012-03

Abstract:With the development of network,the rise of big data and artificial intelligence,data becomes more and more important. The development of all walks of life needs the support of data. Any kind of deep learning and algorithm needs a lot of data as a model for training to get a more accurate conclusion. This paper discusses the main problems in the implementation of web crawler:understanding the basic structure of web page,using the intuitive web page analysis tool to analyze the web page,how to use regular expression to obtain accurate string information,and using Python to achieve simple page data acquisition.

Keywords:web crawler;Python;regular expression;packet capturing analysis

0  引  言

在网络迅速发展的过程中,万维网成为大量信息的载体,数据获取的多样性也使如何有效地提取并利用这些信息成为一个巨大的挑战。而网络爬虫是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本,使用网络爬虫来面对这个巨大的挑战是最优的,因为网络爬虫作为搜索引擎的重要组成部分,在信息检索过程中发挥着重要的作用,对于网络爬虫,Python有很大的优势,在Python中有各种爬虫框架,方便高效地下载网页,多线程、进程模型成熟稳定。本文将对Python爬虫有效提取大量信息的应用过程进行详细介绍。

1  网页的基本结构

要应用爬虫技术,首先要看应用的领域,本文主要针对网页的结构,了解网页的结构,这些光鲜亮丽的页面都是由代码组成的。这种代码我们称之为HTML(超文本标记语言),HTML是浏览器(Chrome、Safari、IE、Firefox等)看得懂的语言。除了HTML,构建页面还有CSS以及JavaScript。HTML负责页面的结构,CSS负责页面的样式,JavaScript负责页面的动态功能。网页有静态网页和动态网页之分,静态网页并不是没有动态效果的页面,而是指没有后台数据库的不可交互网页,常以.htm、.html、.xml为后缀;动态网页是指能与后台数据库进行数据传递的可交互网页,常以.aspx、.asp、.jsp、.php为后缀。目前很多动态网站都采取了异步加载技术(Ajax),这就是很多时候抓取到的源代码和网站显示的源代码不一致的原因。目前有多种技术和方法可以对动静态网页中的信息进行获取,本文介绍了抓包分析和正则表达式两种方法。下文就介绍一下如何采用抓包分析对动态网页进行分析。

2  Chrome抓包分析

2.1  网页源代码分析

静态和动态两种网页的源代码也是不同的,在分析过程中我们需要对这两种代码都进行分析,其中重要的是对动态页面中的数据包抓取分析,本文采用谷歌浏览器Chrome开发者工具进行抓包分析,具体采用的方法:以京东商品为例分析如何通过Chrome进行抓包。首先打开一个商品的首页,通常抓取到的源代码就是网页最原始的代码,来到网页空白处单击鼠标右键,选择查看网页源代码,并且也可以采用右击鼠标方式选择检查,这样就得到了两种不同的源代码,对代码进行对比分析。而采用右击鼠标方式选择检查得到的代码是经过Ajax加载和JavaScript渲染的源代码,也就是当前网站显示内容的源代码。对比过后会发现,代码随着网页的变化而变化,这就是典型的动态网页异步加载技术(Ajax)的例子。

通过以上方法,我们了解了动态网页,下一步就是怎样获取动态网页中的数据包来爬取动态网页中的信息。

2.2  网页抓包分析

本文尝试使用Chrome抓包分析获取当前页面商品的价格数据。打开浏览器中的开发者工具,然后选择Network选项卡进行抓包分析。此时要按下F5键刷新页面,才可以看到开发者工具中出现了各种各样的包,本文只需要JS的数据包,所以需要使用Filter对包进行过滤,经过筛选后即得到返回的商品价格信息。

打开此包Headers中的URL,里面是商品价格信息的JSON数据呈现,当前的网站开发大都采用这样的模式。分析URL的参数,可以推测出SKUid就是每个商品主键(SKU是一个在物流、运输等产业中常用的缩写,其全称是Stock Keeping Unit(库存量单位),即库存进出计量的基本单元,现在已经被引申为产品统一编号的简称,每种产品均对应有唯一的SKU。例如,商品首页https://item.jd.com/ 100004286189.html中100004286189就是商品的唯一号码标识,可以由抓到的价格数据包中的URL的callback前https: //p.3.cn/prices/mgets?后添加SKUid=商品的号码标识,来直接打开商品的信息从而获得商品价格。

由此得出结論:通过泛化后的URL,理论上只要能得到商品的SKUid,我们就可以访问对应商品的信息。

以上方法可以获取网页中的关键数据,但是从技术角度来说,对于大量数据的采集本方法不适合,需要采用代码的方法进行,下面将详细描述正则。

3  正则表达式获取字符串信息

正则表达式是一组特殊的字符序列,由一些事先定义好的字符以及这些字符的组合形成,常常用于匹配字符串,在Python中,re模块就是一个用于处理正则表达式的模块。

给定一个正则表达式和另一个字符串,可以达到以下两个目的:给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”)。可以通过正则表达式,从字符串中获取我们想要的特定部分。正则表达式对于刚接触的人来说,比较难一些,但是它可以迅速地用极简单的方式表示复杂的字符串,正则表达式具有灵活性、逻辑性和功能性非常强,常用来匹配或提取一些特征字符串。Python中处理正则匹配最常见的函数是match和search函数分别如下:

re.match与re.search的区别:re.match从字符串开始起匹配指定正则表达式,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search从字符串开始匹配正则表达式,直至找到一个尽可能地匹配成功。接下来介绍一个简单的使用正则表达式爬取小说的实例,小说数据获取如下。

(1)抓取网页数据:打开某小说页面,打开浏览器的开发人员工具,使用Requests库获取章节和章节对应的链接信息,并使用response.text获取对应章节的内容。把所有内容读入一个字符串,采用循环的方式读取字符串内容,获取每一个章节,分别去下载小说的内容,提取章节内容:

(2)数据清洗及提取:对于获得的页面上的原始数据,但是获取数据本身的格式(其中包含一些标签、字符)等内容都不符合规范,由于不规范的数据和实际所需要的信息混在一起,因此需要进一步清洗、提取才能获得我们实际需要的数据。所以再次读取获得的字符串信息,获取每一章的信息(包括章节、url):

再使用空字符代替空格、P标签等不需要的数据,对获取的数据进行二次清洗,只保留所需要的小说的文字。

(3)数据持久化:把清洗后的数据保存到新文件中,以便进一步分析。新建一个文件保存小说的内容,在源代码中找到标题所在的标签,使用正则表达式将其匹配为文件的title,并将所需内容写入文件中:

4  结  论

本文介绍了两种方法来进行页面信息的获取,使用Chrome抓包分析可以对动态页面的少量信息进行获取,而正则表达式可以对页面中大量的数据进行获取,对比下,使用正则表达式来获取数据的效率和功能高一些。

使用抓包分析获取异步加载动态网页的数据,下一步会研究使用Python工具实现爬取动态网页。借助Python功能的各种标准库对网页数据的抓取、处理,更方便地实现数据持久化。下一步也会探索一些爬虫框架来完成数据抓取的目标。也会继续学习并解决在更深层次地爬取各大网站信息的同时会遇到的反爬虫问题。

参考文献:

[1] 郭二强,李博.大数据环境下基于python的网络爬虫技术 [J].计算机产品与流通,2017(12):82.

[2] 李培.基于Python的网络爬虫与反爬虫技术研究 [J].计算机与数字工程,2019,47(6):1415-1420+1496.

[3] 王朝阳.基于Python的图书信息系统的设计与实现 [D].长春:吉林大学,2016.

[4] 徐恒.社会化网络数据获取技术研究与实现 [D].长春:吉林大学,2016.

[5] 孙建立,贾卓生.基于Python网络爬虫的实现及内容分析研究 [C]//中国计算机用户协会网络应用分会2017年第二十一届网络新技术与应用年会.中国计算机用户协会网络应用分会2017年第二十一届网络新技术与应用年会论文集.河北雄安:《计算机科 学》编辑部,2017:275-277+281.

[6] 陈琳,任芳.基于Python的新浪微博数据爬虫程序设计 [J].信息系统工程,2016(9):97-99.

[7] 陆树芬.基于Python对网络爬虫系统的设计与实现 [J].电脑编程技巧与维护,2019(2):26-27+51.

[8] 熊畅.基于Python爬虫技术的网页数据抓取与分析研究 [J].数字技术与应用,2017(9):35-36.

[9] 吴爽.基于python语言的web数据挖掘与分析研究 [J].电脑知识与技术,2018,14(27):1-2.

作者简介:温娅娜(1999.03-),女,汉族,内蒙古包头人,本科,学士学位,研究方向:人工智能和软件开发应用。

猜你喜欢

网络爬虫
炼铁厂铁量网页数据获取系统的设计与实现
基于社会网络分析的权威网页挖掘研究
主题搜索引擎中网络爬虫的实现研究
浅析如何应对网络爬虫流量
网络爬虫针对“反爬”网站的爬取策略研究