python无头浏览器兼容问题_docker+python无头浏览器爬虫
摘要:海量数据从哪儿来?世上本无所谓大数据的,爬的多了,自然就有数据了。 为什么使用docker? 这两年网上关于docker的讨论不亚于当年的云计算,现在云计算已经落地生根了。
海量数据从哪儿来?世上本无所谓大数据的,爬的多了,自然就有数据了。
为什么使用docker?
这两年网上关于docker的讨论不亚于当年的云计算,现在云计算已经落地生根了。云时代docker被寄予厚望现在也是火的一塌糊涂。
作为一名开发人员,你是否还在因为环境搭不成功而沮丧?你是否经常对于复杂的安装步骤感到反感,因而对新技术望而却步?
作为一名运维人员,你是否经常因为不同操作系统的原因导致部署失败?
那么docker就是为了解决这些痛点而生的。docker不是什么新技术,类似docker的东西早已有之,只不过docker用起来更爽,你真的应该试一试,就像指纹解锁一样。用了你就回不去了。
为什么是无头浏览器?
现在许多网站有反爬虫功能。我们要做的就是尽量把我们的请求伪装成是真正的浏览器发出的一样。最好就直接用浏览器来发送请求,比如使用WebDriver驱动浏览器模拟真人操作。但是这样速度太慢,再说服务器的linux一般都是server版的,根本没有桌面,因此也没有浏览器可用。所以我们就使用无头(headless)浏览器。功能跟真的浏览器一样,速度更快,只不过没有界面罢了。
1.虚拟机安装ubunt16.04。(略)
2.安装docker。ubuntu14以上自带docker,直接安装即可
ubt1606@ubt1606-virtual-machine:~$docker
The program 'docker' is currently not installed. You can install it by typing:
sudo apt install docker.io
ubt1606@ubt1606-virtual-machine:~$sudo apt install docker.io
ubt1606@ubt1606-virtual-machine:~$docker images
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
ubuntu里需要在docker命令前面加sudo,否则会报上述信息。
ubt1606@ubt1606-virtual-machine:~$sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
如果嫌每次输入docker命令都要加sudo麻烦,可以把当前用户加入docker用户组。具体参考这篇文章
3.拉docker镜像
直接访问docker hub比较慢。通过daocloud来访问稍微快一些。 在虚拟机浏览器里打开 http://www.daocloud.io/。 然后注册用户或者直接用微信扫二维码登录。登录后点击“镜像仓库”。点击“DockerHub镜像”。 从这里可以打开docker官方的镜像仓库,然后在里面搜索你要的镜像即可。
搜索python+selenium。其中有一个是这样的“Container with python selenium for lazy people (like me) to avoid configuration xvfb on server.”。这正是我们要的。
该作者还贴心的给了一个小demo。后面我们会用到。
ubt1606@ubt1606-virtual-machine:~$sudo docker pull pimuzzo/selenium-python
Using default tag: latest
Pulling repository docker.io/pimuzzo/selenium-python
Network timed out while trying to connect to https://index.docker.io/v1/repositories/pimuzzo/selenium-python/images. You may want to check your internet connection or if you are behind a proxy.
会发现拉不下来,使用daocloud的加速器。注册账号登录后,点击使用加速器,会给你一个专属链接。 类似这样
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://c4c833cb.m.daocloud.io
ubt1606@ubt1606-virtual-machine:~$sudo su
[sudo] password for ubt1606:
root@ubt1606-virtual-machine:/home/ubt1606#echo "DOCKER_OPTS=\"$DOCKER_OPTS --registry-mirror=http://c4c833cb.m.daocloud.io\"" >> /etc/default/docker
root@ubt1606-virtual-machine:/home/ubt1606#vi /etc/default/docker
查看一下/etc/default/docker文件里的确有了DOCKER_OPTS,小白温馨提示,退出vi的方法是。按一下ESC,然后输入:q
root@ubt1606-virtual-machine:/home/ubt1606#service docker restart
一定要重启docker服务。注意刚才我切换到su用户了,所以前面都没有加sudo
注意这次我换成了 index.docker.io/pimuzzo/selenium-python-xvfb。这也是daocloud页面上的。我就试了一下,这次很快就成功了。
root@ubt1606-virtual-machine:/home/ubt1606#docker pull index.docker.io/pimuzzo/selenium-python-xvfb
Using default tag: latest
latest: Pulling from pimuzzo/selenium-python-xvfb
759d6771041e: Already exists
8836b825667b: Already exists
c2f5e51744e6: Already exists
a3ed95caeb02: Already exists
21fb0716901c: Already exists
9cc47e6dfb6f: Pull complete
08c1371dc842: Pull complete
0aa04c2152b2: Pull complete
db151fc54aee: Pull complete
3f0af4107074: Pull complete
00d9524b72cc: Pull complete
3ba8b369c5ab: Pull complete
aad0e22b9317: Pull complete
Digest: sha256:73b4aca6ecfc2a5bf392065cd07cf7fc89e5da61104492e7c04332f2bfd8da4d
Status: Downloaded newer image for pimuzzo/selenium-python-xvfb:latest
root@ubt1606-virtual-machine:/home/ubt1606#docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
pimuzzo/selenium-python-xvfb latest 18dba38c825a 5 months ago 615.4 MB
root@ubt1606-virtual-machine:/home/ubt1606#
docker images看到类似上述信息就表示镜像拉取成功。注意看SIZE的大小。如果网速不好很可能会失败。失败的话只能多试几次了。再不行就看看有没有其他镜像源,实在不行就用open connect 吧(需要买vps)。也可以从别人那儿拷贝一个镜像文件然后导入到docker里。不管你用什么办法,只要能方便快速地把镜像弄到docker里就行了。
====================================================================
到这一步环境上基本就OK了。如果不是拉取镜像这一步有点小曲折,操作还是非常简单的,简单到令人发指。 要知道拉取一个镜像容易,制作一个镜像可不容易,真的很麻烦的。 一个docker image能为我们节省多少时间啊。这个镜像不光可以在开发的时候用,开发完了之后也是可以直接部署的。一举两得啊。 只有一点,就是开发的时候不太好debug。所以做点小开发或者仅仅是测试某个特定的环境,或者尝试新技术,用docker实在是太方便了。
4.编写第一个小demo
直接使用docker镜像上给的demo。把网址换成baidu。
在/home/ubt1606/demo下建立demo.py文件。 注意ubt1606是用户名
#!/usr/bin/env python
from pyvirtualdisplay import Display
from selenium import webdriver
display = Display(visible=0, size=(800, 600))
display.start()
# now Firefox will run in a virtual display.
# you will not see the browser.
browser = webdriver.Firefox()
browser.get('http://www.baidu.com')
print browser.title
browser.quit()
display.stop()
5.启动容器并映射数据卷
docker run -ti -v /home/ubt1606/demo:/home/somethingpimuzzo/selenium_python_xvfb python /home/something/demo.py
docker run:启动一个容器
-ti: 也可以写成 -i -t,表示申请一个控制台同容器交互。it分别是interact,terminal的首字母
-v /home/ubt1606/demo:/home/something:-v表示映射数据卷。将主机的/home/ubt1606/demo文件夹映射到docker里的
/home/something文件夹。就像windows和VMWare共享文件夹一样。
pimuzzo/selenium_python_xvfb:镜像的名字,表示给哪个镜像创建容器。镜像是死的,只有容器才是活的。镜像相当于一个
windows.iso文件。而容器相当于已经启动起来的windows。
python /home/something/demo.py:运行docker里/home/something文件夹下的demo.py文件。注意路径是docker里的路径。
可以是其它路径。 比如先把一个demo2.py放在/home/ubt1606/demo文件下,然后进入到docker里。在docker里将demo2.py从
/home/something下拷贝到/home/other文件夹下,然后命令换成python /home/other/demo2.py即可。一定要理解“docker里”,“docker里的路径”这个东西。为了不给自己找麻烦,建议就别拷贝到别处了。
小结一下:
当我回头看这篇文章时才发现其实就三步:
拉取一个docker镜像。
写一个demo.py文件并把这个文件映射到docker里。
启动容器运行demo.py文件。
爬虫的编写其实就是用python版的webdriver来编写程序。只不过这里没有使用浏览器,而是pyvirtualdisplay。
本来webdriver和selenium都是独立的,现在整合到一块都叫selenium了。selenium官方宣称是用来做自动化测试的。
不过我看目前用的最多的还是webdriver。就是用它来写爬虫。本文只是抛砖引玉,至于webdriver api的使用比较简单,搞JavaEE的上手非常快,这里就不详细介绍了。
版权声明:本文内容由互联网用户自发贡献,本社区不拥有所有权,也不承担相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:yqgroup@service.aliyun.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
python无头浏览器兼容问题_docker+python无头浏览器爬虫相关推荐
- 360安全浏览器兼容模式怎么设置_360浏览器及安全卫士怎么减少广告弹出?
只要帮客户装系统,大多要求装上360安全浏览器.安全卫士和杀毒.只要时间允许,我会帮客户设置减少一些弹出广告.设置很简单. 曾想过,彻底把广告关了,但是一直没找到更好的方法.选用老版本的360浏览器 ...
- 360安全浏览器兼容模式怎么设置_360浏览器极速模式怎么设置
1/2 打开浏览器,点击地址栏右边图标 2/2 会自动显示两种模式,选择"极速模式"即可
- 为什么要学python语言_我们为什么要学习Python语言?
原标题:我们为什么要学习Python语言? 聊到我们为什么要学习Python语言?小编不禁又想起大佬潘石屹准备开启Python学习旅程时所发布的微博. 我们为什么要学习Python语言? 在农业社会时 ...
- python实验报告心得1000字,python数据分析论文2000字
python有哪些特点和优点 显著的优点Python 语言拥有诸多的优点,这其中,以下几个优点特别显著:简单易学:Python语言相对于其他编程语言来说,属于比较容易学习的一门编程语言,它注重的是如何 ...
- 常见浏览器兼容问题、盒模型2种模式以及css hack知识讲解
什么是浏览器兼容问题?所谓的浏览器兼容性问题,是指因为不同的浏览器对同一段代码有不同的解析,造成页面显示效果不统一的情况.在大多数情况下,我们的需求是,无论用户用什么浏览器来查看我们的网站或者登陆我们 ...
- 常见的浏览器兼容问题
来源于: http://developer.51cto.com/art/201008/218335.htm 浏览器兼容问题一:不同浏览器的标签默认的外边距和内边距不同 问题症状:随便写几个标签,不加样 ...
- showModalDialog模态对话框的使用以及浏览器兼容
ModalDialog 是什么? showModalDialog 是js window对象的一个方法, 和window.open一样都是打开一个新的页面. 区别是: showModalDialog打开 ...
- showModalDialog模态对话框的使用详解以及浏览器兼容
showModalDialog是jswindow对象的一个方法,和window.open一样都是打开一个新的页面.区别是:showModalDialog打开子窗口后,父窗口就不能获取焦点了(也就是无法 ...
- 浏览器兼容问题(实战干货)
常见浏览器兼容性问题与解决方案 所谓的浏览器兼容性问题,是指因为不同的浏览器对同一段代码有不同的解析,造成页面显示效果不统一的情况.在大多数情况下,我们的需求是,无论用户用什么浏览器来查看我们的网站或 ...
- web前端——浏览器兼容问题
[1]为什么会出现浏览器兼容问题 在各大浏览器厂商的发展过程中,它们对web的标准各有不同的实现,标准不同存在差异所以产生兼容性的问题. [2]浏览器内核以及代表作品 IE浏览器内核:Trident内 ...
最新文章
- CentOS6.3 x86_64 mininstall 安装 apahce2.23+jdk1.7+tomecat7+mysql5.1.58
- 第二章:2.4 卷积性质
- java nginx 例子_Java及nginx实现文件权限控制代码实例
- XsdGen:通过自定义Attribute与反射自动生成XSD
- 2017.9.5 能量采集 思考记录
- Redis数据库,Jedis接口分类(使用)说明
- 面试中的智力题及编程实践
- insert时调用本身字段_java中子类调用父类构造方法注意事项
- sublimeText3安装、激活、环境配置与代码补全神器Kite安装配置
- linux终端使用python的matplotlib模块画图出现“could not open display”问题解决
- DDR3 Vivado 仿真测试成功
- 完整的元器件选型指南
- 感应加热电源-谐振移相-感性移相
- Python脚本把支付宝和微信账单数据转换成随手记APP的excel标准模板导入
- VMware中使用U盘PE系统
- js中的trim函数怎么使用
- 用友-应收应付重分类公式设置
- iOS、Mac开源项目记录 - From TimLiu-iOS
- python视频批量抽帧脚本更新
- 如何让百度快照更新不断