用Python做爬虫的各位,不要再用PhantomJS了

再见

最近几天没有写教程,但是一直在翻资料。

在昨天,我翻到了一条消息:PhantomJS宣布暂停开发。

最初我是在今日头条上看到的,原标题是“PhantomJS宣布终止开发”。不过,写这篇文章的时候我看了一下,应该是“暂停”(suspending)……万恶的标题党……

北京时间2018年3月4日1:16(时间上面就这么写吧……GitHub也没有标当地时间……),PhantomJS的作者ariya在PhantomJS的GitHub页面的issue #15344中写道:

由于缺乏积极的贡献,我将会存档该项目。

如果将来我们又重新开发这个项目的话,这个项目还会被取出来。

因此,所有的之前的关于PhantomJS 2.5(由 @Vitallium 提起)和PhantomJS 2.1.x(由 @pixiuPL 提起)的计划也会废弃。接下来,为了防止混淆,上述被废弃的版本的源码和二进制包也会被删除。在未来的通知之前,PhantomJS 2.1.1将会是已知最后的稳定版本。

作者ariya宣布暂停开发PhantomJS

不过从开源中国发的文章来看,这背后是开发者内部的矛盾。之前核心开发者之一 Vitaly Slobodin 宣布退出,当时就有人对这个项目感到担忧。然后另一位核心开发者 pixiuPL 发布公开信表示,自己已被迫辞任合作者。这应该就是ariya宣布暂停开发的导火索吧。

PixiuPL 说自己在去年 11 月被 ariya 邀请成为 PhantomJS 项目在 Github 上的 Collaborator,随后开始深入研究 PJS 的源码,并进行 PR 合并、Issues 处理 、新版本发布等工作。近日,由于他在开发过程中遇到了需要访问项目设置权限的问题,随后在 Skype 和邮件上多次联系 ariya ,但均未得到回复(即使对方在线)。

在公开信发布后的 3 月 4 日,pixiuPL 补充道,ariya 已通过 Skype 回复了他,但对于他接管项目的建议感到不愉快。ariya 似乎更愿意关闭项目,并批评 pixiuPL 创建了 PJS 的内部分支(在 GitHub 之外)。

大牛之间的矛盾我也就不多加评论了,毕竟也不是非常清楚情况。不过PhantomJS这款工具在Python爬虫中可是非常有名的。它是一个无头(Headless,无界面,使用脚本进行操作)浏览器,可以进行模拟登录等操作,以便爬取需要登录的网站。我当时做QQ空间的爬虫的时候就接触到了它。想想还是比较惋惜的。

暂停开发的话,可以用别的工具啊。在开源中国的报道下面的评论中,我也知道谷歌的Chrome就有无头模式。

于是我就想在闲的时候写一下关于爬虫浏览器转变的文章。不过,今天我看到的一条消息,比之前看到的还要震惊。

今天本地调试基于Selenium+PhantomJS的动态爬虫程序顺利结束后,着手部署到服务器上,刚买的热乎的京东云,噼里啪啦一顿安装环境,最后跑的时候报了这么个错误:

UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead

运用我考了五遍才飘过的六级英语定睛一看,这个意思是说,新版本的Selenium不再支持PhantomJS了,请使用Chrome或Firefox的无头版本来替代。脑瓜里瞬间响起了这首歌的旋律,简直不能接受,凭什么就把我们PhantomJS抛弃了(╯‵□′)╯︵┻━┻。

CSDN上的“孔天逸”关于新版本的Selenium不再支持PhantomJS的文章

看来是我火星了……原来Selenium早就准备不支持PhantomJS了。不过作者也说了,可能是因为Firefox和Chrome都带了无头模式,导致PhantomJS的优势瞬间消失了……

这么一说,PhantomJS其实挺惨的……内有内斗,外有打压,搞得众叛亲离(滑稽)。

替代

CSDN上的孔天逸从Mozilla上提供了Selenium+Headless Firefox在Python上实现的方法:

from selenium.webdriver import Firefox
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.support import expected_conditions as expected
from selenium.webdriver.support.wait import WebDriverWait

if __name__ == "__main__":
    options = Options()
    options.add_argument('-headless')  # 无头参数
    driver = Firefox(executable_path='geckodriver', firefox_options=options)  # 配了环境变量第一个参数就可以省了,不然传绝对路径
    wait = WebDriverWait(driver, timeout=10)
    driver.get('http://www.google.com')
    wait.until(expected.visibility_of_element_located((By.NAME, 'q'))).send_keys('headless firefox' + Keys.ENTER)
    wait.until(expected.visibility_of_element_located((By.CSS_SELECTOR, '#ires a'))).click()
    print(driver.page_source)
    driver.quit()

作者也说了,本地要有Firefox;本地要有geckodriver,最好再配置一下环境变量;别每下载一个网页实例化一个webdriver(Firefox or Chrome)然后就close()掉,实例化webdriver的时间也是时间~推荐将下载器做成单例类或将webdirver做类变量。

对于Chrome,博客园上的zhuxiaoxi提供了解决方案(需要安装chromedriver):

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("https://cnblogs.com/")

大家可以按需使用。

结语

我写这篇文章的目的就是想说一下,该换浏览器了。

目前许多关于Python爬虫的教程都还是使用PhantomJS进行讲解的,现在PhantomJS已死,有事请用Chrome或者是Firefox。

目前许多关于Python爬虫的教程都还是使用PhantomJS进行讲解的

(我写这篇文章的时候,居然看到一个14小时前在某个头条号发的关于PhantomJS的教程……不知道该说什么好……)

参考资料

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,743评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,296评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,285评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,485评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,581评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,821评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,960评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,719评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,186评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,516评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,650评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,329评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,936评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,757评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,991评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,370评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,527评论 2 349

推荐阅读更多精彩内容