爬虫-动态渲染页面爬取-Selenium

本文详细介绍了使用 Python 的 Selenium 库来爬取动态渲染页面的步骤和技巧,包括 Selenium 的介绍、安装、基本使用、浏览器对象声明、页面交互、动作链、执行 JavaScript、节点信息获取、Frame 切换、延时等待策略以及异常处理等关键知识点。
摘要由CSDN通过智能技术生成

Python 提供了许多模拟浏览器运行的库,如 Selenium、Splash、PyV8、Ghost 等。我们可以直接使用模拟浏览器运行的方式来实现,这样就可以做到在浏览器中看到是什么样,抓取的源码就是什么样,也就是可见即可爬。这样我们就不用再去管网页内部的 JavaScript 用了什么算法渲染页面,不用管网页后台的 Ajax 接口到底有哪些参数。

1-Selenium介绍

Selenium 是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击、下拉等操作,同时还可以获取浏览器当前呈现的页面的源代码,做到可见即可爬。对于一些 JavaScript 动态渲染的页面来说,此种抓取方式非常有效。

2-准备工作

Selenium安装

ChromeDriver安装

3-基本使用

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

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()

运行代码后发现,会自动弹出一个 Chrome 浏览器。浏览器首先会跳转到百度,然后在搜索框中输入 Python,接着跳转到搜索结果页

在这里插入图片描述此时在控制台的输出结果如下:
在这里插入图片描述
可以看到,我们得到的当前 URL、Cookies 和源代码都是浏览器中的真实内容。

所以说,如果用 Selenium 来驱动浏览器加载网页的话,就可以直接拿到 JavaScript 渲染的结果了,不用担心使用的是什么加密系统。

4-声明浏览器对象webdriver.Chrome()

Selenium 支持非常多的浏览器,如 Chrome、Firefox、Edge 等,还有 Android、BlackBerry 等手机端的浏览器。另外,也支持无界面浏览器 PhantomJS。

from selenium import webdriver

#初始化浏览器对象,并将其赋值为browser
#接下来调用 browser 对象,让其执行各个动作以模拟浏览器操作。
browser = webdriver.Chrome()  
browser = webdriver.Firefox()
browser = webdriver.Edge()
browser = webdriver.PhantomJS()
browser = webdriver.Safari()

5-访问页面browser.get(url)

我们可以用 get() 方法来请求网页,参数传入链接 URL 即可。

from selenium import webdriver

browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
print(browser.page_source) #page_source 属性可以获取网页的源代码,接着就可以使用解析库(如正则表达式、Beautiful Soup、pyquery 等)来提取信息了
browser.close()

#运行后发现,弹出了 Chrome 浏览器并且自动访问了淘宝
#然后控制台输出了淘宝页面的源代码
#随后浏览器关闭。

6-查找节点

方法 描述
单个节点 find_element_by_name() 根据 name 值获取
find_element_by_id() 根据 id 获取
browser.find_element_by_id(‘q’)
find_element_by_css_selector() 根据css选择器
browser.find_element_by_css_selector(’#q’)
find_element_by_xpath() 根据XPath选择器
browser.find_element_by_xpath(’//*[@id=“q”]’)
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element() 传入两个参数:查找方式 By 和值。
find_element_by_id(id) 就等价于 find_element(By.ID, id)
多个节点 find_elements() browser.find_elements(By.CSS_SELECTOR, ‘.service-bd li’)
结果是列表类型,列表中的每个节点是 WebElement 类型。
find_elements_by_id
find_elements_by_name
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值