Python 和 Selenium 的浏览器爬虫

Selenium 是一款强大的基于浏览器的开源自动化测试工具,最初由 Jason Huggins 于 2004 年在 ThoughtWorks 发起,它提供了一套简单易用的 API,模拟浏览器的各种操作,方便各种 Web 应用的自动化测试。

它的取名很有意思,因为当时最流行的一款自动化测试工具叫做 QTP,是由 Mercury 公司开发的商业应用。Mercury 是化学元素汞,而 Selenium 是化学元素硒,汞有剧毒,而硒可以解汞毒,它对汞有拮抗作用。

Selenium 的核心组件叫做 Selenium-RC(Remote Control),简单来说它是一个代理服务器,浏览器启动时通过将它设置为代理,它可以修改请求响应报文并向其中注入 Javascript,通过注入的 JS 可以模拟浏览器操作,从而实现自动化测试。

但是注入 JS 的方法存在很多限制,譬如无法模拟键盘和鼠标事件,处理不了对话框,不能绕过 JavaScript 沙箱等等。

就在这个时候,于 2006 年左右,Google 的工程师 Simon Stewart 发起了 WebDriver 项目,WebDriver 通过调用浏览器提供的原生自动化 API 来驱动浏览器,解决了 Selenium 的很多疑难杂症。不过 WebDriver 也有它不足的地方,它不能支持所有的浏览器,需要针对不同的浏览器来开发不同的 WebDriver,因为不同的浏览器提供的 API 也不尽相同,好在经过不断的发展,各种主流浏览器都已经有相应的 WebDriver 了。最终 Selenium 和 WebDriver 合并在一起,这就是 Selenium 2.0,有的地方也直接把它称作 WebDriver。

Selenium 目前最新的版本已经是 3.9 了,WebDriver 仍然是 Selenium 的核心。

为什么 Selenium 成了爬虫工具

Selenium 的初衷是打造一款优秀的自动化测试工具,但是慢慢的人们就发现,Selenium 的自动化用来做爬虫正合适。我们知道,传统的爬虫通过直接模拟 HTTP 请求来爬取站点信息,由于这种方式和浏览器访问差异比较明显,很多站点都采取了一些反爬的手段,而 Selenium 是通过模拟浏览器来爬取信息,其行为和用户几乎一样,反爬策略也很难区分出请求到底是来自 Selenium 还是真实用户。而且通过 Selenium 来做爬虫,不用去分析每个请求的具体参数,比起传统的爬虫开发起来更容易。

Selenium 爬虫唯一的不足是慢,如果你对爬虫的速度没有要求,那使用 Selenium 是个非常不错的选择。Selenium 提供了多种语言的支持(Java、.NET、Python、Ruby 等),不论你是用哪种语言开发爬虫,Selenium 都适合你。

这是因为 Selenium 启动都需要调用浏览器的核心来启动一个浏览器。

同时,当浏览器访问网站的时候,如果数据没有载入完全,Selenium 是不会对数据进行分析的,有些网站的载入很慢,这样就导致 Selenium 的处理很慢。

这个不是因为 Selenium 程序慢,而是等待数据载入的时间太长。

启动浏览器

使用下面 3 句话就可以模拟启动一个浏览器,并且通过浏览器访问一个网站后,对网站来进行分析。

from selenium.webdriver import Chrome

chrome = Chrome(service=Service(r"C:\Users\yhu\Downloads\chromedriver-win64\chromedriver-win64\chromedriver.exe"))
chrome.get('https://www.isharkfly.com/')

// Get Element
rowContent = chrome.find_elements(By.XPATH, '/html/body/div[3]/div/div/div/div[4]/div/table/tbody/tr')

如实例没有启动的话,获得元素的代码就没有办法执行。

其实慢就是慢在这里。

Python 和 Selenium 的浏览器爬虫 - Python - iSharkFly

相关推荐
〖是♂我〗36 分钟前
自定义数据集 使用scikit-learn中svm的包实现svm分类
开发语言·python
抱抱宝1 小时前
Pyecharts之特殊图表的独特展示
python·信息可视化·数据分析
deephub2 小时前
Python GIL(全局解释器锁)机制对多线程性能影响的深度分析
python·机器学习·gil
MatpyMaster3 小时前
基于PyQt5打造的实用工具——PDF文件加图片水印,可调大小位置,可批量处理!
python·pdf
go54631584653 小时前
python 从知网的期刊导航页面抓取与农业科技相关的数据
开发语言·python·科技
米码收割机3 小时前
【python】tkinter实现音乐播放器(源码+音频文件)【独一无二】
开发语言·python·pygame
星如雨グッ!(๑•̀ㅂ•́)و✧3 小时前
Java NIO全面详解
java·python·nio
笛柳戏初雪4 小时前
Python中的函数(下)
开发语言·python
码界筑梦坊4 小时前
基于Django的个人博客系统的设计与实现
后端·python·django·毕业设计