python+Selenium2+chrome构建动态网页爬虫工具

2013-06-30 11:23 22863人阅读 评论(6) 收藏 举报
 分类:
python-web(11) 

版权声明:本文为博主原创文章,未经博主允许不得转载。

网页爬虫分为静态网页爬虫和动态网页爬虫,前者是指索要获取的网页内容不需要经过js运算或者人工交互,

后者是指获取的内容必须要经过js运算或者人工交互。这里的js运算可能是ajax,人工交互不需要解释了。

静态爬虫现在已经很成熟了,借助于python中的urllib和beautifulsoup可以很容易实现,爬到的内容通

过python的字符串处理写入数据库,甚至可以通过web形式展现。动态爬虫有两种工具,一种是selenium,现

在是selenium2(selenium+webdriver),另一种是headless的phantomjs(对caperjs的封装),前者主要是

通过控制浏览器实现,尤其是那种带video tag的场合,例如国内的一些CP站点例如youku,后者则是不需要

展现内容的场合,或者可以理解为不带video tag的场合。据说后者的速度要比前者快,因为它不需要浏览器

展现,可以闷头去做。

当然还有其他的工具,这里就不列举了。

本文描述的是基于selenium的,因为我想获取video tag,这个phantomjs是做不到的。

本文分几个部分描述。相关网页地址,安装配置,示例代码。这里假设熟悉python静态爬虫和相关语法(例如HTML等)。

一、相关网页地址:

1,phantomjs:这里给出github地址及其说明。

https://github.com/ariya/phantomjs/wiki/Supported-Web-Standards

2,phantomjs:这里给出一个例子的地址

http://pm163.lofter.com/post/aa404_197d8e

3,js对搜索引擎的影响:

http://www.gooseeker.com/cn/node/knowledgebase/javascriptvsseo

4,selenium项目来源:

http://www.infoq.com/cn/news/2011/06/selenium-arch

5,selenium 文档之一:

http://docs.seleniumhq.org/docs/03_webdriver.jsp

6,基于python的selenium及下载页:

http://selenium-python.readthedocs.org/en/latest/installation.html#introduction

https://pypi.python.org/pypi/selenium

7,基于PYthon的官方文档和非官方文档

http://selenium.googlecode.com/svn/trunk/docs/api/py/index.html

http://selenium-python.readthedocs.org/en/latest/index.html

8,基于chrome的webdriver:这里注意chorme的版本,现在是27.

https://code.google.com/p/selenium/wiki/ChromeDriver

https://code.google.com/p/chromedriver/downloads/list

二,配置

第一部分列举了那么多地址,是因为查阅资料很重要,安装和使用是很快的。

简单的说,如果要基于windows做的,那么chromedriver、python和chrome都要winddows版本,这

里不能用cygwin。因为cygwin是linux,并且可以理解为不带桌面的linux。

如果要基于linux的,那么必须是linux桌面版,我这里用的是ubuntu 桌面版12.04 LTS。这样整套都

在linux下。

webdriver要放在/usr/bin目录下。而不是和chrome同级目录下。后者一般是/opt/google/chrome。

否则会提示找不到webdriver。selenium2的实例是基于firefox的,因为firefox是ubuntu默认带的,所以

天然就可以用。

如果是不带server的方式驱动,而是直接用webdriver驱动,那么python代码要在linux系统里面

的终端去运行,不能通过远程控制方式运行,否则会报错。 server方式远程控制一台机器是另一种配置方法。

三。实例代码:

1,面的实例代码是原生的例子,调用firefox可以直接使用。调用chrome,则直接改成webdriver.Chrome()即可。

[plain] view plaincopy
  1. from selenium import webdriver
  2. from selenium.common.exceptions import NoSuchElementException
  3. from selenium.webdriver.common.keys import Keys
  4. import time
  5. browser = webdriver.Firefox() # Get local session of firefox
  6. browser.get("http://www.yahoo.com") # Load page
  7. assert "Yahoo!" in browser.title
  8. elem = browser.find_element_by_name("p") # Find the query box
  9. elem.send_keys("seleniumhq" + Keys.RETURN)
  10. time.sleep(0.2) # Let the page load, will be added to the API
  11. try:
  12. browser.find_element_by_xpath("//a[contains(@href,'http://seleniumhq.org')]")
  13. except NoSuchElementException:
  14. assert 0, "can't find seleniumhq"
  15. browser.close()

2,改UA:下面代码是改UA的例子,仅导入chrome_options即可。我列举了chrome里面的四种常见移动设备的UA。

有一个网站可以专门显示UA:chrome只要你改好UA后,用这个网站测试即可。

http://www.whatsmyuseragent.com/

[plain] view plaincopy
  1. options = webdriver.ChromeOptions()
  2. #options.add_argument('--user-agent=Mozilla/5.0 (iPad; CPU OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3')
  3. #options.add_argument('--user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3')
  4. #options.add_argument('--user-agent=Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; Nexus S Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1')
  5. options.add_argument('--user-agent=Mozilla/5.0 (Linux; U; Android 4.0.2; en-us; Galaxy Nexus Build/ICL53F) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30')
  6. browser = webdriver.Chrome(chrome_options=options) # Get local session of firefox

3,获取网页内容:

python版本的selenium2获取到的内容自然是python能解析的。
例如某网站下述video tag。

[plain] view plaincopy
  1. <video id="xxx-html5player-video" preload="none"
  2. src="http://xxx.com/xxxx/v.m3u8"
  3. style="width: 100%; height: 100%; display: none; position: relative;"></video>
  4. 下面的代码片段即可得到URL
  5. url=xxx'
  6. browser = webdriver.Chrome
  7. browser.get(url)
  8. elem=browser.find_element_by_id('xxx-html5player-video') #by id
  9. elem=browser.find_element_by_tag_name('video')  #by tag name
  10. elem.get_attribute('src')#get url,python风格的词典结构,elem返回的是词典结构。

4,获取到内容后,可以写入数据库。做下一步分析。

python+Selenium2+chrome构建动态网页爬虫工具相关推荐

  1. python(六)动态网页爬虫

    python(六)动态网页爬虫 什么是动态网页爬虫 动态网页 在网站不重新加载的情况下(网页的url不发生改变),通过ajax技术动态更新网站中的局部数据. ajax 异步JavaScript和XML ...

  2. .net core + headless chrome实现动态网页爬虫

    一般的http请求库只能够抓取到网页的静态内容,如果想抓取通过js动态生成的内容可以使用没有gui的browser库,之前许多人会使用phantomjs作为headless browser,不过现在p ...

  3. python+selenium+Chrome(无头版)爬取国家地表水水质自动监测实时数据发布系统(修改版)——动态网页爬虫

    这是一篇动态网页的爬虫教程,新手可以操作一下,简单实用. 一.前言 这篇blog跟python+selenium+phantomJS爬取国家地表水水质自动监测实时数据发布系统--动态网页爬虫的爬虫思路 ...

  4. org.apache.poi Excel列与行都是动态生成的_网络爬虫:Python动态网页爬虫2种技术方式及示例...

    作者:糖甜甜甜 https://mp.weixin.qq.com/s/5Dwh5cbfjpDfm_FRcpw1Ug 这一讲,我将会为大家讲解稍微复杂一点的爬虫,即动态网页的爬虫. 动态网页技术介绍 动 ...

  5. Python动态网页爬虫技术

    这一讲,我将会为大家讲解稍微复杂一点的爬虫,即动态网页的爬虫. 动态网页技术介绍 动态网页爬虫技术一之API请求法 动态网页爬虫技术二之模拟浏览器法 安装selenium模块下载 Google Chr ...

  6. python+selenium+phantomJS爬取国家地表水水质自动监测实时数据发布系统——动态网页爬虫

    一.关于phantomjs 1.介绍 PhantomJS是一个为自动化而生的利器,它本质上是一个基于webkit内核的无界面浏览器,并可使用JavaScript或CoffeeScript进行编程.由于 ...

  7. 实战|Python轻松实现动态网页爬虫(附详细源码)

    用浅显易懂的语言分享爬虫.数据分析及可视化等干货,希望人人都能学到新知识. 项目背景 事情是这样的,前几天我公众号写了篇爬虫入门的实战文章,叫做<实战|手把手教你用Python爬虫(附详细源码) ...

  8. beautifulsoup解析动态页面div未展开_实战|Python轻松实现动态网页爬虫(附详细源码)...

    用浅显易懂的语言分享爬虫.数据分析及可视化等干货,希望人人都能学到新知识.项目背景事情是这样的,前几天我公众号写了篇爬虫入门的实战文章,叫做<实战|手把手教你用Python爬虫(附详细源码)&g ...

  9. Python程序员都在用的20个网页爬虫工具

    网络爬虫在许多领域都有广泛的应用,它的目标是从网站获取新的数据,并加以存储以方便访问.而网络爬虫工具越来越为人们所熟知,因为它能简化并自动化整个爬虫过程,使每个人都可以轻松访问网络数据资源. 1. O ...

  10. python实现监控电脑打开网页_Python轻松实现动态网页爬虫(附详细源码)

    AJAX动态加载网页 一 什么是动态网页 J哥一向注重理论与实践相结合,知其然也要知其所以然,才能以不变应万变. 所谓的动态网页,是指跟静态网页相对的一种网页编程技术.静态网页,随着html代码的生成 ...

最新文章

  1. 感谢有您--我的51CTO【与51CTO的故事】
  2. 3.jeesite传统开发
  3. Android:ListView常见错位之CheckBox错位
  4. 【机器学习】机器学习中样本不平衡,怎么办?
  5. zabbix mysql监控告警_Zabbix监控mysql配置及故障告警配置
  6. 上海php黑名单,php判断ip黑名单程序代码实例
  7. 【DotNetMLLearn】.NET Core人工智能系列-概述
  8. 做手游的计算机配置要求,原神pc配置要求高吗 最低什么配置能流畅运行​
  9. halcon裁剪图像_Halcon学习之七:改变图像的现实方式和大小
  10. 创建 demo.html,demo.html
  11. JAVA day18,19 单列集合Collection:List(ArrayList,LinkedList,Vector)、Queue(Deque)、Set(HashSet,TreeSet),比较器
  12. 一道很有趣的多元函数求极值问题
  13. 先测试再开发?TDD测试驱动开发了解一下?
  14. 计算机网络期末复习要点(谢希仁第8版)抱佛脚通用
  15. 记忆减退之---钽电容
  16. 移动脑电在神经发展障碍研究中的运用
  17. 人人网如何注册与设置密码
  18. 什么相片可以两张弄成一张_美图秀秀怎么把两张图片合成一张?美图秀秀两张图片融合方法汇总_图形图像_软件教程_脚本之家...
  19. R语言导入数据文件 (Excel文件、csv文件导入R)
  20. java 获取远程服务器信息,java 远程获取服务器信息

热门文章

  1. fork的写时复制1
  2. python编程读取文件内容_python编程从入门到实践:读取整个文件和创建包含文件各行的内容...
  3. java 原型模式的应用_java中原型模式详解和使用方法
  4. C# pictureBox显示图像 自动调整大小 缩放自适应 画图位置自适应
  5. 如何用python写程序设置当前打印机为默认打印机,从Python打印到标准打印机?
  6. linux 图形化修改时区,Centos 7图形化与安装中文支持与修改时区方法
  7. 计算机功能性英语作文,2017考研英语作文:10个功能性“仿写”句型
  8. jsbridge实现及原理_Hybrid APP基础篇(四)-JSBridge的原理
  9. arcsde 10.2 for oracle 安装,ArcSDE 10.2 for Oracle 12C安装注意事项
  10. 参考官方mysql自定义一个mysql sink connector