Seleniumd介绍

在写Python爬虫的时候,最麻烦的不是那些海量的静态网站,而是那些通过JavaScript获取数据的站点。Python本身对js的支持不好,所以就有良心的开发者来做贡献了,这就是Selenium,他本身可以模拟真实的浏览器,浏览器所具有的功能他都有哦,加载js更是小菜了。

Selenium的安装:

使用pip命令,你可以像下面这样安装 selenium:

pip install selenium

大家可以参考一下中文文档

浏览器的选择:

在写爬虫的时候,用到最多的就是Selenium的Webdriver,当然,webdriver也不可能支持所有的浏览器,让我们看看他支持哪些浏览器吧:

 from selenium import webdriver
help(webdriver) PACKAGE CONTENTS
android (package)
blackberry (package)
chrome (package)
common (package)
edge (package)
firefox (package)
ie (package)
opera (package)
phantomjs (package)
remote (package)
safari (package)
support (package)

可以看出支持的浏览器还是比较丰富的,移动端到电脑端应由具有。

然而,个人觉得在写爬虫的时候,更推荐使用PhantomJS:

PhantomJS介绍:

(1)一个基于webkit内核的无头浏览器,即没有UI界面,即它就是一个浏览器,只是其内的点击、翻页等人为相关操作需要程序设计实现。

(2)提供JavaScript API接口,即通过编写Js程序可以直接与webkit内核交互,在此之上可以结合Java语言等,通过java调用js等相关操作,从而解决了以前c/c++才能比较好的基于webkit开发优质采集器的限制。

(3)提供windows、Linux、mac等不同os的安装使用包,也就是说可以在不同平台上二次开发采集项目或是自动项目测试等工作。

PhantomJS全面支持各种原生的Web标准:DOM处理、CSS选择器、JSON、Canvas和SVG。最重要的是他是一个没有GUI的程序,也就意味着他可以省去大量的加载图形界面的时间。有人曾经测试过,使用Selenium模块调用上述浏览器,PhantomJS的速度是第一名哦~~~~~第二和第三是chrome和ie。

PhantomJS的安装:

这里有一点要说明,PhantomJS并不是一个Python模块,他是一个独立的,第三方软件,这也就意味着我们不能简单的使用pip工具安装啦。

Mac下安装PhantomJS:

这里我们只要使用brew工具就能安装上PhantomJs了

brew install phantomjs

linux下安装PhantomJS:

linux下有很多第三方发型版本:比较常用的一般是 Ubuntu、centos等等。这些发行版也都有自己强大的软件管理仓库:apt、yum等等

那么安装起来也就超方便了:

# ubuntu
apt-get install phantomjs # centos
yum install phantomjs

win下安装PhantomJS:

虽然win下没有上述的方便的安装方式,但是我们可以去官网下载安装包,然后在安装,地址在这里:Download | PhantomJS

使用Selenium&PhantomJS抓取数据:

下面我们介绍一个简单到抓取百度的例子

 from selenium import webdriver
#我们首先导入了Selenium里的webdriver,
browser = webdriver.PhantomJS()
#然后建立一个PhantomJS的浏览器对象,
url = 'https://www.baidu.com'
browser.get(url)
#最后我们通过get方法,打开了百度的首页。
browser.implicitly_wait(3)

这里要说一下 implicitly_wait():

浏览器解释JS脚本是需要时间的,但实际上这个时间并不好确定,如果我们手动设定时间间隔的话,设置多了浪费时间,设置少了又会丢失数据implictly_wait函数则完美解决了这个问题,给他一个时间参数,他会只能等待,当js完全解释完毕就会自动执行下一步。

找到搜索框和搜索按钮:

在第一步的时候,我们其实就已经把百度首页的数据爬到本地了,剩下当然是数据的筛选,这里推荐用Selenium自带函数来完成,Selenium 本身给出了相关函数来定位有效数据的位置。

# 找到第一个匹配的元素
find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector # 一次查找多个元素 (这些方法会返回一个list列表):
find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector

相信之前学习了bs4和Xpath之后,用这个完全没有什么压力吧,看函数名就应该知道是具体通过什么来定位数据了。上面我们只是打开了百度而已,在使用真实浏览器的时候是不是要先在文本框里输入关键词然后在按搜索按钮呢?

在PhantomJS里我们也需要这样做:

 text = browser.find_element_by_id('kw')
#首先调用find_element_by_id()方法找到了text栏的位置, text.clear() text.send_keys('python')
#然后通过send_keys()方法来输入关键字 print(browser.title)
#输出:百度一下,你就知道 button = browser.find_element_by_id('su')
#接着还是通过find_element_by_id()方法找到提按钮, button.submit()
#最后我们通过.submint()方法来模拟点击,发送搜索请求

用chrome开发者工具可以快速定位到各个element的位置:

筛选答案

 results = browser.find_elements_by_class_name('t')
#通过browser.find_elements_by_class_name()方法定位到搜索结果,返回一个element类型的列表
#再通过element.text 和 element.get_attribute()方法来获取我们需要的数据。
for result in results:
print('标题:{} 超链接:{}'.format(result.text,result.find_element_by_tag_name('a').get_attribute('href')))

下面看一下运行结果

 标题:Welcome to Python.org官网 超链接:http://www.baidu.com/link?url=nLxm0hnvH9HcezbpHRuDVS5BVAyuR91xzNhFE4Qy9_a
标题:Python_百度百科 超链接:http://www.baidu.com/link?url=jUTKRqQ91sf2liPtZlVHVr82UNuP12PPKdll2ZNQ9-kifb4GeLDG3SlV9NuCvI2BWUSqG8coNRzsYvlYusYuJK
标题:Download Python | Python.org 超链接:http://www.baidu.com/link?url=PP6oQw_LHvRmuc8wl4c-BFn_GouagfYU-IY0HqdUF88ikq5zriz1JNManttiFFuX
标题:Python教程 - 廖雪峰的官方网站 超链接:http://www.baidu.com/link?url=89Q6mTNkcq1NdeDubb3jgq0Du3OX8hUcNt90fyhJ6nMWXfAPyJUZ7Vg-b9CSpaxdpOxGErzWzASuq4E96mHnxlZsLi6wieiEqtEk8UsJqjnfeWfhrLz_lWrtuPkWjXAo
标题:Mac版 Python最新官方版下载_百度软件中心 超链接:http://www.baidu.com/link?url=xkHduP0KLXEL1jvFt2ftD8LXgRG0gBop2ojePLkZr5s7WvcBZ1nYxU2sPjedwQGabjC_v89VUoYuKSzy8aI-Ja
标题:python吧_百度贴吧 超链接:http://www.baidu.com/link?url=N5vRlEUf6OWIyclfhkWz5r38A-kUhT40K7VTNIwLdR3zwNF8hFKbtsQtaRbCa_p0uPPwFaKRgMN0zvgvTMm6rK
标题:玩蛇网 - Python教程学习与Python资源分享平台 超链接:http://www.baidu.com/link?url=0AK0LLSw35u5qIfXy7O9n3AcgWy8A4MaR55Ia2LyVQjmxivy_Q_UY_khKCWJp7iG
标题:Python教程_百度文库 超链接:http://www.baidu.com/link?url=okXMxRDGk1j6Ni5Il_hwNz8RC7C79XtAo76NptBIUF-GNvEKwpR-vKCAjY9DrBugt2pFZ87UiLlKcrhdgNsGjQwdLXbPc36ACgSok0PEKOq
标题:Python - 伯乐在线 超链接:http://www.baidu.com/link?url=kBa0MYj70CsPtPIpCikAxJJol_b_JHtSGD9iot7-hrX2eBNH_WW2r-PoaJf_nFhp

Selenium模拟浏览器初识的更多相关文章

  1. selenium模拟浏览器对搜狗微信文章进行爬取

    在上一篇博客中使用redis所维护的代理池抓取微信文章,开始运行良好,之后运行时总是会报501错误,我用浏览器打开网页又能正常打开,调试了好多次都还是会出错,既然这种方法出错,那就用selenium模 ...

  2. Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过Selenium模拟浏览器抓取

    区别于上篇动态网页抓取,这里介绍另一种方法,即使用浏览器渲染引擎.直接用浏览器在显示网页时解析 HTML.应用 CSS 样式并执行 JavaScript 的语句. 这个方法在爬虫过程中会打开一个浏览器 ...

  3. Selenium模拟浏览器抓取淘宝美食信息

    前言: 无意中在网上发现了静觅大神(崔老师),又无意中发现自己硬盘里有静觅大神录制的视频,于是乎看了其中一个,可以说是非常牛逼了,让我这个用urllib,requests用了那么久的小白,体会到sel ...

  4. python下selenium模拟浏览器基础操作

    1.安装及下载 selenium安装: pip install selenium  即可自动安装selenium geckodriver下载:https://github.com/mozilla/ge ...

  5. 使用selenium模拟浏览器抓取淘宝信息

    通过Selenium模拟浏览器抓取淘宝商品美食信息,并存储到MongoDB数据库中. from selenium import webdriver from selenium.common.excep ...

  6. python爬虫:使用Selenium模拟浏览器行为

    前几天有位微信读者问我一个爬虫的问题,就是在爬去百度贴吧首页的热门动态下面的图片的时候,爬取的图片总是爬取不完整,比首页看到的少.原因他也大概分析了下,就是后面的图片是动态加载的.他的问题就是这部分动 ...

  7. Python 配置 selenium 模拟浏览器环境,带下载链接

    使用浏览器渲染引擎.直接用浏览器在显示网页时解析HTML,应用CSS样式并执行JavaScript的语句. 这方法在爬虫过程中会打开一个浏览器,加载该网页,自动操作浏览器浏览各个网页,顺便把数据抓下来 ...

  8. 16-使用Selenium模拟浏览器抓取淘宝商品美食信息

    淘宝由于含有很多请求参数和加密参数,如果直接分析ajax会非常繁琐,selenium自动化测试工具可以驱动浏览器自动完成一些操作,如模拟点击.输入.下拉等,这样我们只需要关心操作而不需要关心后台发生了 ...

  9. Spider-Python爬虫之使用Selenium模拟浏览器行为

    分析 他的代码比较简单,主要有以下的步骤:使用BeautifulSoup库,打开百度贴吧的首页地址,再解析得到id为new_list标签底下的img标签,最后将img标签的图片保存下来. header ...

随机推荐

  1. 【转】如何使用JMeter测试Java项目

    一. Apache JMeter工具 1)简介 JMeter——一个100%的纯Java桌面应用,它是 Apache组织的开放源代码项目,它是功能和性能测试的工具.JMeter可以用于测试静态或者动态 ...

  2. JVM内存占用情况深入分析

    内存分布 首先,列举一下一个JVM进程主要占用内存的一些地方: Young Old metaspace java thread count * Xss other thread count * sta ...

  3. Java-Runoob:Java 数组

    ylbtech-Java-Runoob:Java 数组 1.返回顶部 1. Java 数组 数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同. Java 语言 ...

  4. Cassandra Wiki Login JmxSecurity

    JmxSecurity 监控和管理Cassandra

  5. 《C++ Primer》读书笔记

    在C++中,基类必须指出希望派生类重新定义哪些函数,定义为virtual的函数是基类期待派生类重新定义的,基类希望派生类继承的函数不能定义为虚函数. 引用和指针的静态类型与动态类型可以不同,这是C++ ...

  6. PyQt 5布局管理

    绝对定位 绝对定位有以下限制 1.如果调整窗口,控件的大小和位置不会改变 2.在各种平台上应用程序看起来不会一样 3.如果改变字体,我们的应用程序的布局就会改变 4.如果我们决定改变我们的布局,我们必 ...

  7. html5的canvas方法的总结

    canvas的方法 save()保存当前环境的状态 restore() 返回之前保存过的路径状态和属性 createEvent() getContext()返回一个对象,指出访问绘图功能必要的API ...

  8. 如何扩大重做日志(redolog)文件的大小

    假设现有三个日志组,每个组内有一个成员,每个成员的大小为1MB,现在想把此三个日志组的成员大小都改为10MB 1.创建2个新的日志组alter database add logfile group 4 ...

  9. Java string String

    java.lang.String string这个不是关键字 关String的讲解,参看:http://www.cnblogs.com/octobershiner/archive/2012/04/02 ...

  10. 搭建psdash 监控系统

    一.监控系统介绍 Psdash 是一款查看 Linux 系统信息的 web 面板,和另一款系统监控工具 Glances 一样,psDash 的系统信息的采集也是由 psutil 完成的.和 Glanc ...