python 爬取 js渲染_python--Selenium(动态渲染页面爬取)

本文介绍了如何使用Selenium解决JS动态渲染页面的爬取问题,包括Selenium的基本使用、浏览器对象声明、节点查找与交互、执行JavaScript、延迟等待等功能,并给出了相关示例代码。

上一节,学习了Ajax,Ajax 其实也是JS 动态渲染的页面的一种形式,通过直接分析Ajax,仍然可以借助requests 或者 urllib 来实现数据爬取。

但是JS动态渲染的页面不止Ajax 一种;还有就是像淘宝这种页面,即使是Ajax 获取的数据,但是其Ajax 接口含有很多加密参数,我们直接很难找出其规律,,也就很难直接分析Ajax 来抓取。

为了解决这些问题,可以直接使用模拟浏览器运行的方式来实现,这样就可以做到在浏览器中看到是什么样,抓取的源码就是什么样,也就是可见及可爬。这样我们就不用管网页内部的JS 用了什么算法渲染页面,不用管网页后台的Ajax 接口到底有什么参数。

Python提供了很多模拟浏览器运行的库,如Selenium、Splash、PyV8、Ghost等。

Selenium:

是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击、下拉等操作,同时还可以获取浏览器当前呈现的页面的源代码,做到可见即可爬。

1.准备工作:

Chrome浏览器安装;

ChromeDriver安装;

Selenium安装。

2.基本使用

from selenium importwebdriverfrom selenium.webdriver.common.by importByfrom selenium.webdriver.common.keys importKeysfrom selenium.webdriver.support importexpected_conditions as ECfrom selenium.webdriver.support.wait importWebDriverWait

browser=webdriver.Chrome()try:

browser.get (‘https://www.baidu.com‘)

input= browser.find_element_by_id(‘kw‘)

input.send_keys(‘Python‘)

input.send_keys(Keys.ENTER)

wait= WebDriverWait(browser, 10)

wait.until(EC.presence_of_element_located((By.ID,‘content_left‘)))print(browser.current_url)print(browser.get_cookies())print(browser.page_source) //网页源代码finally:

browser.close()

下面了解一下sewlenium 的具体用法

3. 声明浏览器对象

selenium支持很多浏览器: Chrome、Firefox、Edge等,还支持Android、BlackBerry等手机端的浏览器,也支持无界面浏览器 PhantomJS。

初始化:

from selenium importwebdriver

browser=webdriver.Chrome()

browser=webdriver.Firefox()

browser=webdriver.Edge()

browser=we

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值