昊天SEO

使用PhantomJS 和Selenium 模拟浏览器行为爬取网页

1.什么是Selenium?

Selenium 是一款Web 应用自动测试工具, 使用它我们可以完全模拟用户行为对Web 页面进行操作. 一般来说Selenium 被用在Web 应用自动化测试方面, 不过用它来做爬虫爬取一些须要调用js 的网站也是没有问题的.

Selenium 本身支持多种浏览器引擎, 它可以直接调用安装的电脑上的Firfox 浏览器, 不过如果使用Chrome 的话必须要额外安装一个ChromeDriver. 这些都是题外话, 因为这里我们使用PhantomJS 作为爬虫的引擎.

2.为什么要使用PhantomJS

PhantomJS 是一个无界面, 基于Webkit 的javascript 引擎. 一般来说我们的爬虫是须要运行在服务器上的, 往往这个时候系统并没有图形界面, 或者配置太低跑个浏览器实在是浪费. 而不需要图形界面的 PhantomJS 可谓是我们的不二之选.

3.环境配置

首先我使用的是python 版的Selenium

安装PhantomJS 就有点麻烦了,PhantomJS 并没有python 版, 在stackoverflow 看到一种曲线救国的方法: 先安装NodeJs, 再用NodeJS 的包管理工具安装PhantomJS.

不出意外的话我们已经可以使用PhantomJS 作为Selenium 的浏览器引擎工作了.

4.Selenium 的使用方法

编写爬虫的过程中我们完全不须要了解PhantomJS 的细节, 把他当做一个浏览器就OK了, 重点在于Selenium 的使用方法. 大方向当然是参考官方手册http://selenium-python.readthedocs.org/en/latest/index.html , 另外以下列举几个我在编写过程中遇到的问题和解决办法.

  • 获取element 的html 内容

Selenium 提供了一个page_source 获取页面的html 代码, 使用方法非常简单:

它返回的是一个str

如果要获取某个element 的html, 可以使用如下方法:

  • 等待页面加载

如果网站使用ajax 异步加载页面, 我们可能须要等待一段时间再读取内容, 最简单粗暴的方法是使用sleep:

这种方法虽然简单, 但是非常低效, 或者有时候网络条件不好等待的时间不够. 不用担心, Selenium 给我们提供了两种非常有效的等待方法: explicit waits 和implicit wait.

explicit waits 使用代码明确等待某一条件发生, 例如某元素出现, 某按复选框被选中等等.

提供的条件有:

  • title_is
  • title_contains
  • presence_of_element_located
  • visibility_of_element_located
  • visibility_of
  • presence_of_all_elements_located
  • text_to_be_present_in_element
  • text_to_be_present_in_element_value
  • frame_to_be_available_and_switch_to_it
  • invisibility_of_element_located
  • element_to_be_clickable – it is Displayed and Enabled.
  • staleness_of
  • element_to_be_selected
  • element_located_to_be_selected
  • element_selection_state_to_be
  • element_located_selection_state_to_be
  • alert_is_present

implicit wait 告诉webdriver 在查找element 之前要等待的时间, 它作用在webdriver 的整个生命周期内.

5.贴一个小例子

抓取学校教室的使用情况

运行效果:Selenium

 

未经允许不得转载:新乡seo|网站优化,网站建设—昊天博客 » 使用PhantomJS 和Selenium 模拟浏览器行为爬取网页

网站的维护离不开大家的支持鼓励,捐赠让我更有动力走的更远&& 也可以关注我的微信公众号,发布更多的干货
本文网址:https://www.168seo.cn/selenium/1393.html

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址