数据爬取

2024-10-11

数据爬取(共3篇)

数据爬取 篇1

1 概述

随着生活水平的提高,现阶段旅游行业呈现出休闲度假需求上升、散客化自由行的趋势,互联网技术的发展促使在线旅游快速发展。人们已经不满足于同质化的旅游体验,智慧旅游应运而生。智慧旅游有赖于精准的大数据分析,然而网络上数据虽多,却分散于不同的网站,数据结构也不尽相同。其中,首要的问题是要实现批量按需获取数据。尽管可以编程实现网络数据爬取,但使用专门的数据爬取工具对没有编程基础的用户而言可能是更为有效的一个方法。研究基于一款网页数据爬取工具,根据需求制定数据爬取方案,对旅游网站的数据实现批量获取。

2 研究设计

2.1 定义

智慧旅游是以现代通信和信息技术为支撑,以云服务为基础,以游客体验为基准,配套以现代化智能化管理,将进一步促进地方经济的发展,打造出智慧生态旅游目的地[1]。简单地说,就是游客与网络实时互动,让游程安排进入触摸时代。从而利用信息化技术,把一些旅游资源进行资源整合,然后为广大游客进行量身定做合适的旅游计划,这样便可以让广大游客对旅游过程有充分的了解,实现真正的智慧旅游。

网络爬虫又称网络机器人,是一种按照一定的规则,自动抓取万维网信息的程序或者脚本[2]。被广泛应用于互联网搜索引擎或者其他类似网站,可以自动采集所有其能够访问的页面,并对页面数据进行信息处理。网络爬虫首先要明确抓取内容,因为网页数据爬取,是针对目标条件信息,内容的定向批量筛选和批量采集最终生成用户所需格式的数据信息[3]。目前相关的爬取数据的方法有很多,可以使用编程方法自主实现,如使用Python实现;也可以使用专门的网页数据爬取工具实现,如八爪鱼。

2.2 网络数据爬取工具在智慧旅游应用的切入点

智慧旅游的实现有赖于大规模数据分析支持的精准推荐,其前提是获取足够丰富的数据。网络数据爬取工具可以自动化地实现网页数据的批量下载,并以结构化方式存储。实现智慧旅游需要以下几个关键步骤:

(1)智慧旅游应用方案建模,主要解决需要哪些数据,解决什么问题。

(2)利用爬取工具获取所需数据,其中根据不同网站的网页结构设计规则并实施是关键。

(3)利用已经获取的数据进行数据分析,为智慧旅游提供基于数据的决策依据。

第一步是研究的问题驱动,第二步是研究的主要内容,需要根据旅游需求制定与之匹配的数据爬取方案,获取爬取的数据集后可以进行第三步。

3 实例分析

3.1 问题描述

以外出旅游预定酒店为例,通常用户需要浏览不同网站,自己完成信息搜索、需求匹配等工作,操作起来不仅繁杂,而且低效。因此,考虑实现将多个网站的数据批量爬取形成一个数据合集,为后续的数据分析提供基础数据集。具体的需求为酒店行政区、酒店地址、预定价格、顾客评分、评论条数以及酒店环境,包括是否有Wi Fi、是否有停车场、是否有24小时热水等。

3.2 方案框架

(1)准备阶段:收集可供爬取数据的多个旅游网站地址。制定数据抓取规则。

(2)实施阶段:把不同网站的数据按抓取规则进行爬取并形成数据合集。

(3)后期分析:对抓取的数据合集进行数据清洗和重构,按需求进行数据分析。

3.3 实施过程

(1)先打开八爪鱼采集器,点击新建任务,进入任务配置页面,选择任务组,定义任务名字为爬取“住哪儿网”上相关酒店信息,点击下一步进入流程配置页面。如图1所示。

(2)拖入一个打开网页的步骤,在页面URL处输入“住哪儿网”的网址,点击保存。

(3)找到“住哪儿网”页面中最底下的下一页这个地方,点击后建立一个翻页流程,即循环翻页操作。

(4)选中第一页第一个酒店名称,点击创建一个元素列表以处理一组元素,然后点击添加到列表,此时就在列表添加好了当前选中的酒店名称,然后点继续编辑列表,再选择第该页面最后一个酒店名称,并点击添加到列表,此时列表里就出现了当页的所有酒店名称,然后点创建列表完成,并点击循环。

(5)找到第一个酒店的相关信息,如酒店名称、酒店地址、大致价格、顾客评分、评论条数、是否有Wi Fi、是否有停车场等,点击抓取这个元素的文本,逐条进行数据字段的提取,配置完成后,进行字段名称的修改字段,最终启动单机采集。

(6)将采集到的数据导出到数据库或者Excel等数据承载工具中。

(7)对采集到的酒店名称、酒店地址、起始价格、顾客评分、评论条数、是否有Wi Fi、是否有停车场等进行分析,整理归纳,然后以可视化的方式呈现,为用户选择适合自己需求的酒店提供决策参考。如图2所示。

4 结语

使用网页爬取工具可以降低对使用者编程门槛的要求,同时还具有一定的灵活性,可以实现较多个性化数据爬取的需要。当然,任何一款工具都具有一定的局限性,比如适用范围有限、效率不高等。此外,研究中的用例仅针对某网站的特定需求,对于不同网页结构的数据爬取还需要更多的规则设计和实施。后续研究将进一步细化需求爬取多维异构数据,为基于大数据分析的智慧旅游提供可供实现的解决方案。

参考文献

[1]黄婧.武汉“智慧旅游”背景下的生态旅游景区建设模式研究[J].特区经济,2015,(9):144-146.

[2]佚名.详解网络爬虫与Web安全[J].计算机与网络,2012,38(12):38-39.

数据爬取 篇2

这篇文章主要介绍了python实现爬取千万淘宝商品的方法,涉及Python页面抓取的相关技巧,需要的朋友可以参考下

本文实例讲述了python实现爬取千万淘宝商品的方法,分享给大家供大家参考。具体实现方法如下:

import timeimport leveldbfrom urllib.parse import quote_plus import reimport jsonimport itertoolsimport sysimport requestsfrom queue import Queuefrom threading import ThreadURL_BASE = ‘s.m.taobao.com/search?q={}&n=200&m=api4h5&style=list&page={}‘def url_get(url): # print(‘GET ‘ + url) header = dict header[‘Accept‘] = ‘text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8‘ header[‘Accept-Encoding‘] = ‘gzip,deflate,sdch‘ header[‘Accept-Language‘] = ‘en-US,en;q=0.8‘ header[‘Connection‘] = ‘keep-alive‘ header[‘DNT‘] = ‘1‘ #header[‘User-Agent‘] = ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36‘ header[‘User-Agent‘] = ‘Mozilla/12.0 (compatible; MSIE 8.0; Windows NT)‘ return requests.get(url, timeout = 5, headers = header).textdef item_thread(cate_queue, db_cate, db_item): while True: try:cate = cate_queue.get()post_exist = Truetry: state = db_cate.Get(cate.encode(‘utf-8‘)) if state != b‘OK‘: post_exist = Falseexcept: post_exist = Falseif post_exist == True: print(‘cate-{}: {} already exists ... Ignore‘.format(cate, title)) continuedb_cate.Put(cate.encode(‘utf-8‘), b‘crawling‘)for item_page in itertools.count(1): url = URL_BASE.format(quote_plus(cate), item_page) for tr in range(5): try:items_obj = json.loads(url_get(url))break except KeyboardInterrupt:quit() except Exception as e:if tr == 4: raise e if len(items_obj[‘listItem‘]) == 0: break for item in items_obj[‘listItem‘]: item_obj = dict(_id = int(item[‘itemNumId‘]),name = item[‘name‘],price = float(item[‘price‘]),query = cate,category = int(item[‘category‘]) if item[‘category‘] != ‘‘ else 0,nick = item[‘nick‘],area = item[‘area‘]) db_item.Put(str(item_obj[‘_id‘]).encode(‘utf-8‘), json.dumps(item_obj, ensure_ascii = False).encode(‘utf-8‘)) print(‘Get {} items from {}: {}‘.format(len(items_obj[‘listItem‘]), cate, item_page)) if ‘nav‘ in items_obj: for na in items_obj[‘nav‘][‘navCatList‘]:try: db_cate.Get(na[‘name‘].encode(‘utf-8‘))except: db_cate.Put(na[‘name‘].encode(‘utf-8‘), b‘waiting‘)db_cate.Put(cate.encode(‘utf-8‘), b‘OK‘)print(cate, ‘OK‘) except KeyboardInterrupt:break except Exception as e:print(‘An {} exception occured‘.format(e))def cate_thread(cate_queue, db_cate): while True: try:for key, value in db_cate.RangeIter(): if value != b‘OK‘: print(‘CateThread: put {} into queue‘.format(key.decode(‘utf-8‘))) cate_queue.put(key.decode(‘utf-8‘))time.sleep(10) except KeyboardInterrupt:break except Exception as e:print(‘CateThread: {}‘.format(e))if __name__ == ‘__main__‘: db_cate = leveldb.LevelDB(‘./taobao-cate‘) db_item = leveldb.LevelDB(‘./taobao-item‘) orig_cate = ‘正装‘ try: db_cate.Get(orig_cate.encode(‘utf-8‘)) except: db_cate.Put(orig_cate.encode(‘utf-8‘), b‘waiting‘) cate_queue = Queue(maxsize = 1000) cate_th = Thread(target = cate_thread, args = (cate_queue, db_cate)) cate_th.start() item_th = [Thread(target = item_thread, args = (cate_queue, db_cate, db_item)) for _ in range(5)] for item_t in item_th: item_t.start() cate_th.join()

百度百科景点信息爬取及组织研究 篇3

1.1 网络爬虫

网络爬虫(又称网页蜘蛛,网络机器人),它是按一定规则自动抓取网页信息的程序,它可以用来检查站点链接的有效性,若是能把网页中的相关数据保存下来,就成了搜索引擎。

1.2 Html Unit

Html Unit是一款开源的JAVA页面分析工具,读取页面后,可以有效的使Html Unit分析页面上的内容[1]。项目可以模拟浏览器运行,被誉为java浏览器的开源实现。这个没有界面的浏览器,运行速度也是非常迅速的。并且自带Html解析的库,可以有效的分析出Dom的标签,提取关键信息。

1.3 JDOM

JDOM是用JAVA语言读、写、操作XML的新AP函数,JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作。通过Java代码来访问、操作并输出XML数据。将Html Unit解析后提取出来的关键信息以XML文件保存。

1.4 XPath

XPath即为XML路径语言,它是一种用来确定XML文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。在解析Html文本文档时,借助XPath可以快速定位到相应结点,即使有些结点会根据不同的页面会动态变化,会采取相应策略,过滤掉无关结点,爬取关键节点。

2 实例

爬取过程为以下4个过程,如图1所示。

2.1 景点词条关键字的收集

由于百度百科以关键字为搜索条件,采集全国景点相关信息的首要步骤就是收集全国各个景点的名字,以及其所在的省市县的划分。因此我们借助某旅游网站,采用爬虫技术,对其站点进行访问,借助其原有的树形菜单包含的省市县街道的导航栏(每个结点指向的URL包含有其范围内景点相应名字),就采用Java Script人工模拟点击展开其树形结构,再把每个结点的URL从上至下依次加入队列依次访问,爬取相应景点的名字,形成新的子节点,并加入相应地区所在的父结点。并以XML格式保存。这样就得到了全国景点的名字的收集工作,且包含了景点所在的地区划分[2,3,4]。网站景点布局如图2所示。

其结构为一棵树,获取景点关键字便从这棵树入手。

具体实现流程如图3所示:

旅游网站html页面的代码如图4所示。

以下为处理区、省节点关键代码:

(1)8个区的结点的处理

(2)区以下省的结点的处理

2.2 词条URL的获取

在百度百科下以post方式,即为http://baike.baidu.com/search/word?word="+key根据关键字key得到旅游景点的词条URL。经过百度百科服务器分析后跳转,转到我们想要的结果页面,实质为模拟真人查询百度词条。下图中以凤凰古城为例,如图5所示。

具体实现代码如下:

pkey为前一节获取的景点名,此处为方便直接复制批处理时为关键字数组变量。

2.3 词条Html文档的解析

对于Html源文件,对文档的关心信息提取工作都建立在对其内容进行分析的基础之上,需要将其解析成DOM树结构,这样的模型方便我们进行大量逻辑单元中提取信息,这个DOM树结构具有等级结构,可以进行局部的分析,也可以整体分析[5]。之后采用迭代算法遍历这个DOM树结构,删除掉的无用的标签,方便后续工作的提取。

通常情况,仅仅解析某一个特定的页面,通过XPath指定相应路径的标签,获取该标签内的信息是没有问题的。然而对于百度百科这样的某一类型的网站,虽然整体结构看似相同,但是不同的结果页面返回的Html文档的DOM树结构就会有所差别,里面的同一块模块下内容的栏目数不一致导致,要想获取到我们想要的那些信息,首先解析这棵DOM树,根据其返回的结果,动态的指定的XPath路径,再根据指定路径的标签,获取标签内的相关信息[6,7]。

百度百科内容从上至下大致分为四个模块,在向服务器发送post请求后,得到的html页面,保存在Html Page中,分别四次独立解析,提取出各个模块不同的内容。第一块为简介,由于只是字符串所以返回String,第二块为基本信息及其属性,是以键值对出现返回Map这样的集合容器中,第三部分为目录,返回List的集合容器,第四部分为详细内容,返回为Map的集合容器,便于后面存储的时候解析。这个过程一共写了四个方法,每个模块都封装了都封装了相应的方法,来解析获取相应的内容。

词条基本分为4大块:

(1)介绍,如图6所示。

(2)词条关键信息键值对,如图7所示。

(3)目录节点下详细内容,如图8所示。

(4)目录下详细信息,如图9所示。

词条html页面的代码如图10所示。

由于四个过程原理相同,以下仅给出获取介绍的部分代码:

2.4 解析结果以XML格式文件保存

将上一小节获得到的信息也分为4块,以XML格式保存。由于其内容和结构的区别,封装在不同的集合容器中,然后将容器中的内容展开,再将四个不同的部分写到XML文档中,使其排版结构结构和百度百科结构保持一致。

创建XML文件格式的关键代码如下:

然后分别对4个part中写入,下面给出part1与part2的核心代码:

3 结束语

本文中的实例使用网络爬虫对旅游景点相关信息的爬取可以为旅游者提供准确、有效的旅游信息,同时也期望网络爬虫能智能爬取站点的有效信息,既能保护站点的安全稳定,也能满足日益增长的数据信息需求。

参考文献

[1]张佳荣.Java开源项目Html Unit在浏览器模拟方面的应用[J].电子制作,2015(8):79.

[2]李晓溪,王昇.基于HTMLParser的HTML解析研究[J].网络财富,2009(8):192-193.

[3]钟春琳,司方豪.一种基于网络爬虫解析HTML的网络热词获取方法[J].电脑编程技巧与维护,2014,(12):96-97.

[4]罗刚,王振东编著.自己动手写网络爬虫.北京:清华大学出版社2010.10.

[5]曹海燕.网页爬虫系统的设计[J].中国科技博览,2015(5):226.

[6]杜长燕,李详龙.基于WEB的网络爬虫的设计[J].无线互联科技,2015(5):49-50.

上一篇:乳腺癌根治术后护理下一篇:古诗词曲