非结构化数据分析与挖掘:(四)网络爬虫与数据采集

优采云 发布时间: 2022-06-19 17:30

  非结构化数据分析与挖掘:(四)网络爬虫与数据采集

  不如就从脚下开始吧,假设你刚好站在网易新闻的首页,那么你就从首页开始爬,你发现从首页你可以去向各种各样的地方,于是你就从首页爬到了你最感兴趣的电影频道,在社会新闻里你又找到了你最想看的标题,于是你又开心的爬了过去……

  

  “网易门户电影频道导航”

  在这个过程里,你就把首页和电影频道这两个页面的URL都爬取了下来。而此时的你,就是我们常听到的“网络爬虫”!

  所以网络爬虫是就是一个自动提取网页的程序,它为搜索引擎从网络上下载网页。通常来说爬虫是从一个或若干初始网页的URL开始,我们获得初始网页上的URL,然后不断的从当前页面上抽取新的URL放入队列,并且进行一定的分析、过滤,并建立索引,以便之后的查询和检索,爬虫过程自动进行直到满足我们所设置的系统停止条件结束。这种工作就类似于生存在网络上的一只蜘蛛,不断的从一个网页链接到另外一个链接。

  网络世界就是现实世界的翻版,网络中的爬虫也遵循着类似于现实世界中爬虫的规律。爬虫帮助我们利用少量的人工对数据和信息进行监测采集,让我们就可以随时获取网络上的新信息,并且对信息进行有效的积累。

  二简单爬虫工具介绍

  网络世界上已经成型的爬虫软件多达上百种。例如我们所熟知的,Java、C++、Python、R等都可以用来进行网络爬虫。它们可以从网页抓取各种类型的文件,基于用户定义的符号进行分析和利用。

  但是对代码小白来说,传统网络爬虫技术门槛过高,需要专门学习相关的代码知识,对于代码基础比较薄弱的同学难度略大,在此,我们介绍几种简单方便的小工具,可以让大家快速掌握,迅速爬取到用户留在网络上的言论。

  1、优采云信息采集器

  优采云信息采集器的使用方法非常简单,我们只要设置一些网页的基本信息,设计出信息爬取的工作流程,定制好需要采集的信息后,就可以自动化操作,十分快捷的把网络上的文字图片等信息爬取下来供我们所使用。

  下面我们用优采云来展示一下如何爬取网易宝贴吧用户评论,首先我们打开优采云采集器的界面,选择新建任务,由此进入任务配置界面,对我们任务的一些基本信息进行备注。

  “优采云软件任务配置”

  对基本信息进行配置完毕之后,选择下一步,进入到流程配置页面,往流程设计的界面中拖入一个打开网页的步骤,在此我们拖入网易宝的贴吧链接,系统就会自动打开对应的网址,由此我们进入了网易宝吧。

  

  “优采云软件流程设计框”

  然后我们创建循环翻页,点击下一页按钮,在弹出的对话框中选择循环点击下一页,翻页循环创建完毕之后,我们需要对所创建的循环进行保存。

  

  “优采云软件字段配置框”

  浏览器中的每一个网页都是由类似的区域块组成,我们需要查明自己希望抓取的信息属于哪一个区域块,由于每一个区域块的格式都是类似的,因此我们需要创建一个列表循环,以此来循环抓取区域块中的元素,创建好循环列表之后,我们即可进行数据字段的提取,选择自己想要抓取的字段把文本元素添加到抓取选项中即可。所有流程设置完毕之后,优采云将会自动开始信息抓取工作。

  2、集搜客/GooSeeker

  相对于优采云来说,集搜客的难度要略高一点。但是整体的逻辑是类似的。

  我们将自己想要抓取的网页输入到MS谋数台的网址栏,然后按回车键加载,页面中就会显示出我们键入的网页。

  “集搜客软件地址配置框”

  然后我们确定主题,建立一个整理箱。这个整理箱就可以让我们把任意想要获取的信息扔进去。在整理箱中,我们添加进自己想要的内容,并且建立多层次的整理箱结构,也就是建立抓取内容的前后级顺序。

  “集搜客软件内容配置框”

  接下来就是网页信息和整理箱的相互映射。比如说我们想要获取新闻中的标题,那么点击标题之后,谋数台就会自动定位到相应的网页标签节点上。双击节点,我们就可以获得文本信息。

  之后则按照相同的逻辑建立样例,就可以实现数据的批量获取啦。

  三专业爬虫工具介绍

  以上我们介绍的爬虫小工具可能适合于没有特别强工程背景的数据分析师和建模同学,为练手或者为某个特定项目在还没有数据储备的情况下,做个简单的前期准备。

  but~ 如果你对微博一类的数据或者豆瓣某个频道的数据,更有甚你对整个微博、豆瓣的数据觊觎已久,那么你就需要更专业的爬虫技术。

  

  “豆瓣书单\新书速递”

  很多语言提供了不错的爬虫框架,即使没有成熟的爬虫框架,基本也会有爬虫所需的组件。那么问题就来了,哪门语言更适合做爬虫?有没有该语言的爬虫框架推荐?

  

  少女婷

  谁是世界上最好的编程语言?

  PHP是世界上最好的语言

  

  杰哥

  这是别人说的,我的回答是Python,推荐Scrapy框架

  杰哥

  咸蛋少扯,进入正题。接下来我会用 Python 来演示如何爬取豆瓣的信息。但在此我不使用 Scrapy 框架。

  为什么不使用 Scrapy 也是有原因的,因为爬虫技术有太多的细枝末节,Scrapy 针对大部分细枝末节都有具体解决方案。但是框架之所以为框架,它便于大家使用的优点是基于隐藏大量的技术细节之上的。我们就是要拨开技术细节的主要部分,具体Scrapy的使用请自行谷歌。

  当然,这里也不准备介绍爬虫大量的细枝末节,着重介绍一下爬虫涉及到的几大部分。当然在这之前,大家需要做些准备工作。需要安装 Python 及requests,lxml 模块,详细的安装步骤请谷歌。

  1、代理

  前面的爬虫小工具都没有涉及过代理这个概念,这里把它作为第一大块提出来。对于专业爬虫而言,代理是必需品,它的主要功能就是防反爬虫。

  爬虫和反爬虫也是一个攻防战,代理主要的作用是变换 IP,如果一个被封可以马上替换使用另一个。代理只是针对反爬虫的一小块,比如设置合理的 user-agent,控制一定的爬取间隔等等,都在防反爬虫中需要考虑。并且这些反爬虫手段也是在不停变化的,需要及时的应对变化。但代理作为重要的一环,如果你是要严肃的建立一个爬虫系统,用于商业或者研究,这是提前考虑的很大一部分工作。

  当然你会说我有多个代理怎么办?

  那么需要你动手再写几行代码。假设你只使用 http代理,如果需要 https ,雷同。下面实现了从proxies 列表中随机选取一个代理。

  2、解析

  第一部分的代码示例,其实我们已经把相关网页爬取下来,放在 resp 中。网页已经爬下来了,接下来就要解析网页。

  解析网页?你可能有疑问了,我只要爬取下来,保存好,以备后续的分析就好,不需要在爬虫过程中去解析就可以了。

  但往往事情不是这样发展的,比如说要爬取豆瓣,你不可能知道豆瓣的所有网页的 url。一般来说我们会从豆瓣主页出发,解析并爬取主页中涉及的 url,以此类推,达到爬取整个网站的目的。

  这里我们选用 lxml 作为我们的解析工具,使用其 xpath 的功能。为什么选用 lxml,无他,解析效率高、 api 也相对比较简洁。

  

  代码简洁,使用 xpath 获取class 属性以‘lnk-’打头的所有锚点()标签。

  拿到这些标签,接下来就是获取各个标签下的 href 属性,就是我们要爬取的 url 了。

  上述代码通过解析豆瓣主页获取相关感兴趣的 url,然后进行爬取。作为举例,这里只爬取了2层,主页及主页中的 url。稍加改动就能够做到递归广度优先爬取,如果你喜欢,深度优先的爬取方式也没有问题。

  3、集群

  以上2点已经完成了爬虫的基本功能,但对于真正的爬虫而言,这些还是远远不够的。真正的爬虫,不可能单台运行,不然要爬下稍大一点的网站得猴年马月。即使不像搜索引擎需要爬取这么大的量的网页,就算需要蛮力爬取某个网站,或者*敏*感*词*爬虫服务的提供商,背后运行的爬虫机器也会是一个不小的数目。

  因此实现一个爬虫集群也是一个必要的选项,幸好 Python 也提供不少好用的异步任务框架, 稍重一点、功能强大的 Celery,轻量级的一点的 RQ、Huey 都是比较不错的选择。这里就不展开了。

  最后献上稍完整的代码示例(注:示例代码,不能生产使用,出问题后果自负^_^):

  

  本文从简单的爬虫小工具到专业的爬虫软件都做了相应的介绍,欢迎大家各取所需,也欢迎在公众号和我们留言交流。

  网易金融大数据实验室是网易金融为落实数据化规划,利用(大)数据技术和数据研究,为提升运营管理水平、优化产品体验、提供决策支持,而设立的职能部门。

  数据技术:让数据更专业,让数据更科学!

  数据研究:让数据会说话,让数据说人话!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线