在服务器Ubuntu系统上跑爬虫,爬虫是基于Selenium写的,遇到好几个问题,现在这里记录一下。

1. 安装环境

  阿里云,Ubuntu16.04,因为没有界面,所以远程命令行操作。爬虫是基于Selenium写的,需要安装Chrome浏览器和Chromedriver。

  1.1 安装Chrome和Chromedriver

    Chrome直接去官网下载,安装稳定版,https://www.ubuntuupdates.org/ppa/google_chrome?dist=stable,下载deb格式的安装包,上传到服务器,用命令行安装:

    1 sudo dpkg -i google-chrome*.deb
     sudo apt-get install -f

    安装完成使用命令查看Chrome的版本,若出现版本号说明安装成功。

    1 google-chrome --version

    Chromedriver去淘宝镜像下载,http://npm.taobao.org/mirrors/chromedriver/,下载时选择与Chrome版本对应的Chromedriver,点开里面的notes.txt可以看到对应关系。下载后上传到服务器,或者 wget -N链接下载。下载后解压,若没有安装解压软件,使用下面的命令安装。

    1 sudo apt-get install unzip

    将解压后的文件移动到/usr/bin/文件下,添加执行权限。

    1 sudo mv chromedriver /usr/bin/
     sudo chmod +x /usr/bin/chromedriver

  1.2 安装Anaconda3

    去清华源下载Anaconda3,https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/,下载后上传到服务器,使用命令安装,此处要注意把Anaconda安装为Linux下多用户共享的软件,避免多个用户重复安装。

    1 sudo bash Anaconda3-5.2.-Linux-x86_64.sh

    安装时有一个步骤是要求你输入安装路径,Linux下多用户共享的软件是在/usr/local目录下,所以填写这个目录。安装最后会提示问你要不要把Anaconda添加到系统路径,选Yes,然后更新root用户的设置(这样做还会避免另一个大坑,下面会讲到)。关闭窗口后生效。

    1 sudo source ~/.bashrc

    若已经为root用户安装了Anaconda,建议卸载后重新安装。卸载方法是删除原来的/usr/local/bin下Anaconda的安装目录,编辑root用户的设置文件:

    1 sudo vim ~/.bashrc

    把里面原来添加的Anaconda路径设置删除,然后更新一下设置。

    1 sudo source ~/.bashrc

    在命令行里输入python,出现的python版本是3.6而不是系统自带的2.7或3.5,说明安装成功。

  1.3 安装Selenium

    在root用户下安装:

    1 pip install selenium

    打开python,输入以下代码,不报错说明安装成功。

    1 from selenium import webdriver

    安装到这里就能跑代码了嘛?不,还不行,哈哈哈。

2. 修改配置来执行代码

    Selenium跑不起来,报错。就不截图了,只是说不能正常启动。经过我的搜索,有两个问题会导致这个错误:

    selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally (Driver info: chromedriver=........

    1. 当前执行代码的用户是root用户,而root用户打开Chrome需要在沙盒里运行,webdriver里默认关闭了沙盒,所以报错。两种解决方法,为Ubuntu添加一个新用户或者修改代码里的设置。我只实验了第一种,添加了一个新用户,第二种没试。因为root用户只用来管理,新用户用来跑代码,分开不容易出错。

    Ubuntu里添加新用户的方法是在root用户下执行:

    1 sudo adduser username

    会让你设置密码。companyname,phone之类的直接enter跳过就行。

    2. 没有界面,所以装一个虚拟界面才行。

    在root用户下安装pyvirtualdisplay:

    1 pip install pyvirtualdisplay

    然后在代码里添加以下几行,进行测试:

    1 from selenium import webdriver
     from pyvirtualdisplay import Display
    
     if __name__ == '__main__':
     display = Display(visible=0, size=(800, 800))
     display.start()
     browser = webdriver.Chrome()
     browser.get('http://www.baidu.com')
     print (browser.title)

    大功告成。第一篇博客,嘻嘻。 如果还有问题那就是第一步安装的Chrome和Chromedriver版本不匹配导致的,仔细检查一下。

Ubuntu下的Selenium爬虫的配置的更多相关文章

  1. Linux(Ubuntu)下MySQL的安装与配置

    转自:http://www.2cto.com/database/201401/273423.html 在Linux下MySQL的安装,我一直觉得挺麻烦的,因为之前安装时就是由于复杂的配置导致有点晕.今 ...

  2. Ubuntu下安装、激活并配置Pycharm

    Ubuntu下安装.激活并配置Pycharm 最近在学习Python这门语言,到了需要Python编译器学习的阶段,通过网上了解各个Python编译器的优缺点,最后选择了pycharm作为Python ...

  3. Ubuntu下安装JDK以及相关配置

    1.查看系统位数,输入以下命令即可 getconf LONG_BIT 2.下载对应的JDK文件,我这里下载的是jdk-8u60-linux-64.tar.gz 3.创建目录作为JDK的安装目录,这里选 ...

  4. Fedora和Ubuntu下安装OpenGL开发环境配置

    Fedora下OpenGl开发环境配置 开发OpenGL工程需要3个库文件和对应的头文件: libglut.so,libGLU.so,libGL.so, gl.h ,glu.h, glut.h 这些库 ...

  5. ubuntu下的openfire安装、配置、运行

    openfire服务器              Openfire 采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议.您可以使用它轻易的构建高效率的即时通信服务器.Op ...

  6. Java全栈程序员之02:Ubuntu下Java环境安装、配置、测试

    在上文讲完之后,我们手里的ubuntu只能算是一个上网机,什么也干不了,本篇我们将折腾它为开发机. 这里,我们这里假定你对linux体系是初级选手,所以本篇会讲的啰嗦一点,高手就出门左转吧. 1.安装 ...

  7. Ubuntu下Hadoop的安装和配置

    最近又需要要搭hadoop环境,所以开始学习,下面是我的笔记,仅供大家参考! Hadoop安装: JDK1.6+ 操作系统:Linux,Window和Unix也可以做Hadoop的开发,只有Linux ...

  8. [转载]Ubuntu下apache的安装与配置

    原文地址:https://blog.csdn.net/gatieme/article/details/53025505 1 安装apache 在 Ubuntu 上安装 Apache,有两种方式 使用源 ...

  9. ubuntu下Tomcat7的安装和配置

    和前几个软件一样,Tomcat 同样是由JAVA开发的,所以,在安装前一定要装好JDK. 大家可以到 http://tomcat.apache.org/download-70.cgi 下载最新的Tom ...

随机推荐

  1. Django---手动编写视图

    手动编写视图 一. Request----->URL---->业务处理(Views)(Http Response) Response-------> 二. VOE    Django ...

  2. __add__,关于运算符重载(用户权限)

    1.首先定义三种用户类型:普通用户.管理员.超级管理员,不同用户类型的用户权限关系如下: 先看一段代码: class Scope(): # 定义一个基类,因为每个权限类都需要add()方法 allow ...

  3. 部署的docker image总是太大,怎么办?

    sudo docker images REPOSITORY                        TAG                 IMAGE ID            CREATED ...

  4. JavaScript 判断当前设备是否是移动端还是PC

    if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){ alert('移动端')}else { alert('PC端') }

  5. jquery判断字符长度 数字英文算1字符 汉字算2字符

    <input type="text" maxlength="25" oninput="textlength(this)"> &l ...

  6. PHP 获取一篇文章内容中的全部图片,并下载

    做个记录,在工作or面试中有可能会遇到function downImagesFromTargetUrl($url, $target_dir = null) { if(!filter_var($url, ...

  7. TCP三次握手及TCP连接状态 TCP报文首部格式

    建立TCP连接时的TCP三次握手和断开TCP连接时的4次挥手整体过程如下图: 开个玩笑 ACK: TCP协议规定,只有ACK=1时有效,连接建立后所有发送的报文ACK必须为1 SYN(SYNchron ...

  8. The type com.google.protobuf.GeneratedMessageV3$Builder cannot be resolved. It is indirectly referenced from required .classfiles

    在做项目的时候,导入了几个类,导入了相关的jar. 结果在package处报了The type com.google.protobuf.GeneratedMessageV3$Builder canno ...

  9. Vue学习3:计算属性computed与监听器

    下面是计算属性相关代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  10. python itertools 模块

    Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数 首先,我们看看itertools提供的几个“无限”迭代器: >>> import itertools ...