Selenium 爬取评论数据,就是这么简单!

文末高能

一、前言

我们知道,如今的 web 页数据很多是动态加载的,普通的爬虫只是抓取静态的 页。实用性很差,因此,我们需要使用 Selenium 来爬取动态数据。评论区的数据,大多数情况下,都需要下拉刷新才能加载出来。而 Selenium 就能帮我们很好的爬取动态数据。

在本场 Chat 中我将介绍如何用基于 Selenium 的爬虫爬取 B 站评论,并介绍如何用 Firefox 浏览器的实用插件 FirePath 协助爬虫。主要内容包括:

  1. 对比静态爬虫与动态爬虫

  2. 什么是 Seleniumelenium 工具的安装(基于 Firefox 浏览器)

  3. 介绍强大的 Xpath 定位工具——FirePath 协助爬虫

  4. 实例操作:爬取 B 站评论

  5. 拓展:介绍 Tar 浏览器,实现匿名 IP 爬虫,防止 IP 封禁

二、环境搭建

(1) Windows10(有兴趣的小伙伴可以在Linux尝试)

(2)IDE:JetBrains PyCharm Community Edition 2017.1.2 x64(如果是学生、可以申请到免费版)

(3)Python2.7、pip工具

(4)Firefox浏览器(版本55.0)以及Firefox下的插件FirePath

这里介绍一下FirePath的安装。打开Firefox 按以下步骤安装:

(5)Selenium版本3.5

使用Pip工具在windows的cmd命令行下

因为我这里已经装好了 所以cmd显示的输出会和你们不一样。

(6)FireFox对应的Selenium驱动程序

下载链接:驱动下载地址(https://github.com/mozilla/geckodriver/releases)

注意FireFox和Selenium版本对应 笔者在安装这个驱动的时候走了不少弯路。

这个是笔者使用的版本。

还有以下几点一定要注意,那就是下载好的驱动程序请解压到浏览器所在文件夹目录 并且复制好路径到环境变量path。并且请把Firefox浏览器的.exe文件的路径也复制到环境变量path,把驱动文件拷贝一份放在你Python2.7的目录下。这样才能正常建立浏览器和驱动的联系。

Mac 和 linux 可以参考这篇回答(windows也有介绍)关于驱动安装失败常见解答(https://www.zhihu.com/question/49568096)

三、正文内容

1. 对比静态爬虫与动态爬虫

爬虫是什么呢虫又被称为 络蜘蛛、 络机器人,是一种自动抓取万维 信息的程序或脚本。我们日常使用的搜索引擎就是通过爬虫技术实现的。我们可以使用爬虫来获取大量数据。

我们平时上 的时候,有时需要填写各种验证码,如果你观察细心,有些验证码旁边会有一行字:“我们需要验证你是不是机器人。”这就建站人用验证码的方式过滤掉一些爬虫。

其实Python也有识别验证码的库,这里给大家推荐pytesseract库,一般的验证码都能解决,有兴趣的朋友可以去了解

可以参考这篇文章Pytesseract库识别验证码(http://www.cnblogs.com/yutingmoran/p/5984213.html)

那么,为什么建设 站的人要检测爬虫呢会想,不都是访问 页吗是,我们需要知道,使用爬虫会给 站的服务器带来不少负担,影响服务器性能。而且,爬虫并不是真正的人,不是真正的客户,这当然不被建站人喜欢。而且爬虫爬取来的数据最好不要用于商业用途,不然会遇上法律纠纷的。

这里有一篇文章是关于爬虫使用不当的案例:爬虫使用不当法律纠纷文章(http://www.sohu.com/a/72197083_115980)

因此,我们写爬虫的人,应该站在建站人的角度思考。尽可能在不影响服务器使用的情况下获取需要的数据。

爬虫根据爬取的数据的不同,可以分为静态的爬虫和动态的爬虫。有些 页只是一个简单的web 页,数据不会动态更新,像百度百科、csdn的博文等等,展示一个 页。单纯只有静态数据的web 页已经不多了。所以静态的爬虫实用性很差。

有些数据则不同,他是动态的,像淘宝里的评论区里的数据,b站里的评论区数据,动态加载。那么静态爬虫就不够用了。那么这时我们就需要我们的法宝—Selenium了

2. 什么是 Seleniumelenium工具安装(基于 Firefox 浏览器)

Selenium是一个浏览器自动化测试框架。本来是作为web应用程序测试的工具。它可以直接运行在浏览器里,模仿真正的用户操作。目前支持IE、Firefox、Safari、Chrome大多数主流浏览器。以前是不用驱动的,现在如果要使用Selenium必须要安装对应浏览器的驱动。也就是说,使用Selenium,爬虫能够更像人的行为,去访问 页,从而获取到有用的信息。

有下面几点好处:一、爬虫的行为更接近人使用浏览器时的操作,降低了被服务器发现的可能。二、对于有些动态数据,比如需要用户下拉刷新才出来的数据,普通的静态爬虫是无可奈何的。

那么使用Selenium模拟用户行为,下拉滚动条就可以把隐藏的数据获取到了。

工具的安装上文已经说明,这里就不再赘述。

3. 介绍强大的 Xpath 定位工具——FirePath 协助爬虫

如果你之前写过爬虫,你就会发现,爬数据前,需要对 页的HTML进行分析。定位到需要的数据处。你也许看过不少教程里教的,使用正则表达式,通过css定位等等。还没爬到数据,就被这个 页分析手工定位数据烦死了。太繁琐了。
上帝教导我们要好好使用工具,而不是只用蛮力。要巧干。这里向大家介绍一款神器。Firefox的定位工具FirePath。

安装的方法上文已经有讲,不再赘述。下面介绍,如何使用它。

(1)打开Firefox,在插件的界面选择启用FirePath。

这里我已经启用了,所以按钮显示的是禁用。如果你是第一次使用,按钮上显示的应该是启用。

(2)在Firefox打开你需要爬取数据的 页 键盘按F12。

(3)

(4)使用鼠标在 页处点击你需要的获取的数据 比如标题,你会发现FirePath已经自动为你生成对应的xPath定位代码。

这样就不用手动分析html结构,自己写路径了。大大提高了效率。

(5)当然也可以使用其他格式的 在这里可以切换。

Xpath和css定位是比较好的定位方式了。

4. 实例操作:爬取 B 站评论

接下来,通过实战的方式来学习一下,具体如何Selenium去爬取B站的评论。实战以前,介绍一些要用到的方法。

(1)

这个是对Selenium自动化测试的配置。可以选择不加载图片、css渲染、禁止使用Javascript目的是为了加快 页的加载。这里根据需要自由选择。第二个参数填2表示禁用。更多用法可以到Selenium官 查看文档

Selenium官

如果进不去,代表你需要一些特殊的工具。这里不做介绍。

(2)

使用find_element_by_xpath()即通过xpath来定位参数就用FirePath获取到的xpath.当然也有其他方式定位

读者可以试试其他方法。

值得注意的是,find_elements_by_xpath和find_element_by_xpath一个有s一个没有。前者返回一个数组,后者返回一个元素。其他方法同理。这里推荐xpath与css两种方法,比较精准。

(3)

这里执行script语句,去定位到我们要到的位置。模拟滚动条下拉。但是值得一提的是每次返回执行一次有关数据请求与返回的方法。最好暂停一会。这是让服务器有缓冲的余地。所以使用time.sleep()

我们在本次实战准备爬取B站的评论区数据、经过分析,b站的评论区数据要下拉到浏览器的一定位置评论区数据才会显示。再分析需要的数据,爬取下响应的数据。这里就不一一分析。有疑问的小伙伴,我可以在chat时给你们解答。这里贴出笔者写的代码。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2017年10月17日
下一篇 2017年10月17日

相关推荐