python | 爬虫笔记,七- 动态渲染页面抓取Selenium

JavaScript 动态渲染的页面不止 Ajax 这一种

另外有的ajax渲染接口含有很多加密参数,难以直接找出其规律

通过模拟浏览器运行的方式来实现,Selenium、Splash、PyV8、Ghost 等

7.1 Selenium的使用

自动化测试工具,支持多种浏览器。爬虫中主要用来解决js渲染问题

用 Selenium 来驱动浏览器加载网页的话,可以直接拿到JavaScript 渲染的结果了,加密不用再担心。

1- 声明浏览器对象

browser = webdriver.Chrome()

2- 访问页面

browser.get('https://www.taobao.com')

3- 查找节点

input_first = browser.find_element(By.ID, 'q') #单个节点
lis = browser.find_elements_by_css_selector('.service-bd li')

4- 节点交互

...

5- 获取节点信息

通过 page_source 属性可以获取网页的源代码,获取源代码之后就可以使用解析库如正则、BeautifulSoup、PyQuery 等来提取信息了。

不过 Selenium 已经提供了选择节点的方法,返回WebElement 类型,可以通过相关方法或属性来解析

6- 获取属性

7- 切换frame

8- 延时等待

确保节点已经加载出来

- 隐式等待

当查找节点而节点并没有立即出现的时候,隐式等待将等待一段时间再查找 DOM,默认的时间是 0。 implicitly_wait()

- 显式等待

指定好要查找的节点,然后指定一个最长等待时间。如果在规定时间内加载出来了这个节点,那就返回查找的节点,如果到了规定时间依然没有加载出该节点,则会抛出超时异常。

##本系列内容为《python3爬虫开发实战》学习笔记。本系列博客列表如下:

(零)学习路线

(一)开发环境配置

(二)爬虫基础

(三)基本库使用

(四)解析库使用

(五)数据存储

(六)Ajax数据爬取

(七)动态渲染页面爬取Selenium

持续更新...

对应代码请见:..