Bootstrap

python爬虫之动态渲染页面的爬取Selenium


前言

在实际情况中有许多网站部分网页并非原始HTML代码,而是用javascript生成的,这并不包含Ajax请求。或者还有许多网站虽是Ajax获取数据,但Ajax接口存在加密的情况,以上两种情况都很难用Ajax来抓取。为了解决这个问题可以直接使用模拟浏览器的方法,巧妙的避开破解AJax接口等一系难题。本文就将介绍部分python提供的模拟浏览器的库,如Selenium、Splash


提示:以下是本篇文章正文内容

一、Selenium是什么?

Selenium [读音sə’liːniəm] 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。驱动浏览器执行特定的动作如点击等。同时还可以爬取页面,可以做到可见即可爬。

基本使用步骤:

  1. 声明使用浏览器类型如谷歌webriver.Chrome()
  2. 访问网页。
  3. 关闭浏览器。
    这只是大致流程,其中每一步之间都可以使用其他操作。
from selenium import webdriver
brower=webdriver.Chrome()
brower.get('https://lddssss /forum.html?mod=viewthread&tid=479470&extra=page%3D1')
print(brower)
brower.close()

1.安装

1.安装Selenium:pip install Selenium
2.安装浏览器驱动WebDriver
3.将存放浏览器驱动文件的目录路径添加到系统环境变量中,注意:下载文件要与浏览器版本相同

详解Selenium的用法

声明浏览器对象

selenium支持的浏览器特别多。介绍三个常见的。

  • brower=webdriver.Chrome()谷歌浏览器
  • brower=webdriver.Firefox ()火狐
  • brower=webdriver.Edge ()IE

声明浏览器之前一定要确定是否安装了相应浏览器和驱动。

访问页面

最常用的浏览器对象的get方法。

查找节点

Selenium提供了八种定位元素的方法,利用这些方法,用户可以定位元素,提取数据等。
分别是id、name、class_name、tag_name、link _text通过a标签的text来定位、partial_link _ext link _text的具有模糊匹配版、xpath 利用XPATH定位、css_selector 利用CSS选择器来定位

使用形式

find_element_by_方法名 :返回单个对象
find_elements_by_方法名:返回列表

from selenium import webdriver
browser=webdriver.Chrome()
browser.get('http://www.baidu.com')
browser.find_element_by_link_text('hao123').click()#点击hao123
#定位百度输入框输入python,并点击搜索按钮
browser.find_element_by_css_selector('#kw').send_key('python')
browser.find_element_by_css_selector('#su').click()

节点交互

  • 输入文字send_key()
  • 清除文字clear()
  • 点击按钮click()

动作链

我们使用浏览器的时候有时候会需要进行一些动作。如实现一个节点的拖拽等操作操作。

鼠标事件

在Selenium webDriver中鼠标操作封装在ActionChains类中来使用,以下是类方法介绍:

  • ActionChains(driver)构造ActionChains对象
  • content_click()单击鼠标右键
  • double

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;