上一节,学习了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

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

被折叠的 条评论
为什么被折叠?



