所谓动态渲染页面爬取,就是模拟浏览器的运行方式,这样就可以做到在浏览器中看到是什么样,爬取的源码就是什么样,也就是可见即可爬。
Selenium的使用
selenium 是一个自动化测试工具,利用它就可以驱动浏览器执行特定的动作,如点击,下拉等操作,同时还可以获取浏览器当前呈现的页面的源代码,对于一些JavaScript动态渲染的页面来说,此种爬取方式非常的有效。
- 节点交互
selenium可以驱动浏览器来执行一些操作,也就说可以让浏览器模拟执行一些动作。比较常见的用法有输入文字时用send_keys()方法,清空文字时用clear()方法,点击按钮时用click()方法。
from selenium import wedriver
import time
browser = webdriver.Firefox()
browser = get('https://taobao.com')
input = browers.find_element_by_id('q')
input.send_keys('三星s4')
time.sleep(1)
input.clear()
input.send_keys('ipad')
button = browers.find_element_by_class_name('btn-search')
button.click()
这里首先驱动浏览器打开淘宝,然后用find_element_by_id()放法获取输入框,然后用send_keys()方法少输入文字,等待一秒后用clear()方法清空少输入框,再次调用send_keys()方法输入ipad文字,之后再用find_element_by_class_name()方法获取搜索按钮调用click()方法完成搜索动作。
7.动作链
在上面得实例中,一些交互动作都是针对某个节点执行的。比如输入框我们就调用它的输入文字和清空方法,对于按钮就调用它的点击方法。其实哈有另外的一些操作他们没有特定的执行对象比如鼠标拖拽键盘按键等。
比入实现一个结点的拖拽操作,将某个节点从一处拖拽到另一处。
8.执行javascript
有些操作selenium API并没有提供。比如下啦进入条,他可以直接运行JavaScript此时使用execute_script()方法可以实现,代码如下:
from selenium import webdriver
browers = webdriver.Firefox()
browers.get('https://www.zhihu.com/explore')
browers.execute_script('window.scrollTo(0, document.body.scrollHeight)')
browers.