【Python】Python3网络爬虫实战-37、动态渲染页面抓取:Selenium

Python3网络爬虫实战-37、动态渲染页面抓取:Selenium 在前面一章我们了解了 Ajax 的分析和抓取方式,这种页面其实也是 JavaScript 动态渲染的页面的一种情形,通过直接分析 Ajax 我们仍然可以借助于 Requests 或 Urllib 来实现数据的抓取。 不过 JavaScript 动态渲染的页面不止 Ajax 这一种。比如中国青年网:http://news.youth.cn/gn/,它的分页部分是由 JavaScript 生成的,并非... 阅读详情

在前面一章我们了解了 Ajax 的分析和抓取方式,这种页面其实也是 JavaScript 动态渲染的页面的一种情形,通过直接分析 Ajax 我们仍然可以借助于 Requests 或 Urllib 来实现数据的抓取。

不过 JavaScript 动态渲染的页面不止 Ajax 这一种。比如中国青年网:http://news.youth.cn/gn/,它的分页部分是由 JavaScript 生成的,并非原始 HTML 代码,这其中并不包含 Ajax 请求。如 ECharts 的官方实例:http://echarts.baidu.com/demo…,其图形都是经过 JavaScript 计算之后生成的。再有淘宝这种页面,它即使是 Ajax 获取的数据,但是其 Ajax 接口含有很多加密参数,我们难以直接找出其规律,也很难直接分析 Ajax 来抓取。

但是数据总归是要抓取的,为了解决这些问题,我们可以直接使用模拟浏览器运行的方式来实现,这样我们就可以做到浏览器看到是什么样,抓取的源码就是什么样,也就是可见即可爬。这样我们就不用再去管网页内部的 JavaScript 用了什么算法渲染页面,不用管网页后台的 Ajax 接口到底有哪些参数,利用模拟浏览器的方式我们都可以直接获取 JavaScript 渲染的最终结果,只要能在浏览器中看到,我们都能抓取。

在 Python 中提供了许多模拟浏览器运行的库,如 Selenium、Splash、PyV8、Ghost 等等,本章我们介绍一下其中 Selenium 和 Splash 的用法,有了它们,我们就不用再为动态渲染的页面发愁了。

Selenium的使用

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

1. 准备工作

本节以 Chrome 为例来讲解 Selenium 的用法,在本节开始之前请确保已经正确安装好了 Chrome 浏览器并配置好了 ChromeDriver,另外还需要正确安装好 Python 的 Selenium 库,详细的过程可以参考第一章的安装和配置说明。

2. 基本使用

准备工作做好之后,首先我们来大体看一下 Selenium 有一些怎样的功能,先用一段实例代码来感受一下:

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()
Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎

运行代码之后可以发现会自动弹出一个 Chrome 浏览器,浏览器首先会跳转到百度,然后在搜索框中输入 Python 进行搜索,然后跳转到搜索结果页,等待搜索结果加载出来之后,控制台分别会输出当前的 URL,当前的 Cookies 还有网页源代码,如图 7-1 所示:

图 7-1 运行结果
在jon g zhi tai可以看到我们得到的当前的 URL、Cookies、源代码都是浏览器中的真实内容。
所以说,如果我们用 Selenium 来驱动浏览器加载网页的话,我们就可以直接拿到 JavaScript 渲染的结果了,不管是什么加密统统不用再需要担心。
下面我们来详细了解一下Selenium的用法。

3. 声明浏览器对象

Selenium 支持非常多的浏览器,如 Chrome、Firefox、Edge 等,还有手机端的浏览器 Android、BlackBerry 等,另外无界面浏览器 PhantomJS 也同样支持。
我们可以用如下的方式初始化:

from selenium import webdriver

browser = webdriver.Chrome()
browser = webdriver.Firefox()
browser = webdriver.Edge()
browser = webdriver.PhantomJS()
browser = webdriver.Safari()

这样我们就完成了浏览器对象的初始化并赋值为 browser 对象,接下来我们要做的就是调用 browser 对象,让其执行各个动作,就可以模拟浏览器操作了。

3. 访问页面

我们可以用 get() 方法来请求一个网页,参数传入链接 URL 即可,比如在这里我们用 get() 方法访问淘宝,然后打印出源代码,代码如下:

from selenium import webdriver

browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
print(browser.page_source)
browser.close()

运行之后我们便发现弹出了 Chrome 浏览器,自动访问了淘宝,然后控制台输出了淘宝页面的源代码,随后浏览器关闭。
通过这几行简单的代码我们便可以实现浏览器的驱动并获取网页源码,非常便捷。

4. 查找节点

Selenium 可以驱动浏览器完成各种操作,比如填充表单、模拟点击等等,比如我们想要完成向某个输入框输入文字的操作,总得需要知道这个输入框在哪里吧?所以 Selenium 提供了一系列查找节点的方法,我们可以用这些方法来获取想要的节点,以便于下一步执行一些动作或者提取信息。

单个节点

比如我们想要从淘宝页面中提取搜索框这个节点,首先观察它的源代码,如图 7-2 所示:

图 7-2 源代码
可以发现它的 ID 是 q,Name 也是 q,还有许多其他属性,那我们获取它的方式就有多种形式了,比如find_element_by_name() 是根据 Name 值获取,ind_element_by_id() 是根据 ID 获取,另外还有根据XPath、CSS Selector 等获取的方式。
我们用代码实现一下:

from selenium import webdriver

browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
input_first = browser.find_element_by_id('q')
input_second = browser.find_element_by_css_selector('#q')
input_third = browser.find_element_by_xpath('//*[@id="q"]')
print(input_first, input_second, input_third)
browser.close()

在这里我们使用了三种方式获取输入框,根据 ID、CSS Selector 和 XPath 获取

Python scrapy 爬虫入门(五)动态渲染页面的爬取(selenium 和 splash) 1 Selenium实现动态页面爬取 1.1 安装python 支持的Selenium库 pip install selenium 1.2 安装浏览器驱动程序 chromedriver 的下载地址:https://chromedriver.storage.googleapis.com/index.html 或者 http://npm.taobao.org/mirrors/chromedriver... 阅读详情

相关推荐

Python爬虫实战:用Requests+BeautifulSoup稳定抓取Yelp评论

HTML解析是网络爬虫最基础也最核心的能力,其本质是将网页源码转化为结构化DOM树并精准提取目标字段。BeautifulSoup凭借宽容的HTML容错性、稳定的CSS选择器支持和极低的学习成本,成为初学者夯实解析基本功与工程师快速交付UGC数据采集任务的首选工具。相比Selenium等浏览器自动化方案,它规避了渲染开销与风控风险;相比正则或lxml,它以语义化定位保障长期可维护性。在本地生活、情感分析、竞品监测等场景中,结合requests模拟真实请求头与合理限速策略,可实现高成功率、合规、可持续的静态页面

weixin_33483304的博客 1148

Python网络爬虫库选型实战:requests、lxml、Scrapy与Playwright四维决策指南

网络爬虫是数据采集的核心技术,其本质是在约束条件下实现稳定、合规、可维护的数据获取。理解HTTP协议基础、HTML解析原理与浏览器渲染机制,是合理选型的前提;而性能、动态内容支持、分布式能力与反爬对抗能力,共同构成技术价值的关键维度。在电商监控、舆情分析、金融数据聚合等真实场景中,不同Python爬虫库展现出显著的能力边界:requests适合静态页面的轻量任务,lxml提供极致解析性能,Scrapy支撑大规模持续采集,Playwright则解决复杂交互与SPA应用抓取难题。本文基于上百个生产项目经验,聚焦

chushang0934的博客 448

用python+selenium+firefox爬取动态网页

以某网站为例: 我们需要爬取的信息如下: 一般的静态网页中,信息是直接写在源代码里面的: 可以方便使用正则表达式抓取。但是对于js生成的动态页面,就需要我们模拟浏览器的行为加载页面,再爬取: 所以我们需要准备的是python3+selenium+firefox  其中firefox 需要安装Xpath checker 和firebug两个插件(用于xpath定位)

lwzswufe的博客 2251

QQ空间爬虫实战:Python+Selenium动态登录与反爬对抗

QQ空间作为典型SPA架构社交平台,其数据采集涉及前端渲染、会话管理、行为模拟与风控响应等核心Web自动化技术。理解动态登录流程、p_skey签名机制、滚动加载逻辑及设备指纹识别原理,是突破反爬限制的关键。这类实践不仅体现Selenium在真实复杂网站中的工程化应用能力,更凸显登录态保鲜、行为拟真度和异常兜底策略的技术价值。适用于个人数据备份、小规模用户调研等合规场景,为Web自动化工程师提供可复用的反爬攻防方法论。

weixin_30899023的博客 568

在WinXP操作系统上安装Tornado2.2详细教程

使用VxWorks的人都想在自己的电脑中装VxWorks的编译器Tornado,然而Win10操作系统对于Tornado并不友好,根本装不成功。而对于Win7操作系统,之前在实验室一台Win7上装Tornado成功过,并且一直在上面进行vx开发,但是过一段时间在其他Win7上装Tornado时又不能成功,由此说明Tornado对于Win7操作系统对Tornado的兼容也不是很好,所以想要长久使用T...

weixin_43822311的博客 4481

FDTD超表面仿真详细教程,几何相位,共振相位,传播相位

FDTD的超表面主要几何相位型(PB型)和共振型两种类型,其中PB型每个cell中的纳米棒的长宽相同,旋转角度不同,共振型长宽不同,旋转角度相同。本博文中以最常见的长方形纳米棒为例,用FDTD演示两种超表面实现的聚焦透镜的功能,包含详细步骤,其他形状,材料的超表面可自行尝试。

wuyuerhhg的博客 3万+

stackelberg博弈_博弈论、多智能体、强化学习(随便记点东西)

多智能体应用场景:已实现:游戏AI。正在努力:UAV,物资运输,快递分发,交通系统。未来:社会学,预测群体行为,城市区域合作,国际关系。博弈论基本定义:玩家集合: 策略集合: 收益函数: 囚徒困境:两智能体矩阵博弈坦白抵赖坦白1,13,0抵赖0,32,2占优策略与最佳应对:上表中两者均具有占优策略,即无论如何都应该选坦白。那么构造下表。坦白抵赖坦白1,13,0抵赖0,12,2对于玩家一来说,坦白...

weixin_39611722的博客 2997

STM32F401RET6寄存器手册阅读标记

对于时钟树配置,可参考STM32CubeMX中的时钟树配置,STM32CubeMX将基础配置图像化,较为简单。RCC_CR寄存器的HSIRDY位为只读位,当读取值为1时,表示HSI振荡器准备就绪,当HSION位被设置时,HSIRDY会自动设置为低电平。//问题标记:USART配置寄存器信息是如何与USART1/2/3建立联系的(为什么不是三个分别配置)查阅寄存器手册可知,需要配置时钟的模块有:USART1,IO port A。(2)TX配置方法(寄存器手册512页)(4)配置寄存器(寄存器手册548页)

m0_72615170的博客 1468

PX4|Gazebo模型加载失败排查指南:从环境变量到资源路径的全面解析

本文针对PX4与Gazebo联合仿真中常见的'Unable to get model name'错误,提供了从环境变量配置、资源路径排查到网络访问问题的全面解决方案。详细解析了GZ_SIM_RESOURCE_PATH等关键变量的作用与设置方法,并给出了离线模型库部署等一劳永逸的修复指南,帮助开发者彻底解决无人机模型加载失败问题。

weixin_29243063的博客 1230

MMdetection3D与MMdetection版本匹配全攻略:从安装到测试一步到位

本文详细解析了MMdetection3D与MMdetection版本匹配的关键问题,提供了从环境配置到测试验证的完整指南。针对常见的安装错误,文章强调了版本依赖链(PyTorch、MMCV、MMDetection、MMDetection3D)精确对齐的重要性,并给出了基于CUDA 11.3等环境的实战版本组合与避坑方案,帮助用户高效部署3D目标检测开发环境。

xgboost6farmer的博客 240

NY8A053E 例程 之 PWM Ouput

更多关于NY8A053E的相关例程请留言!

倪彬笑阳的博客 2925

【总目录】AUTOSAR精进之路专栏介绍及内容目录持续更新...

本专栏系统讲解AUTOSAR汽车电子开发技术,包含Eth/OS/Can/Lin等协议栈、MCAL驱动、功能安全等核心模块。内容基于实际项目经验,从概念原理到工程配置、特殊需求实现及问题排查进行深入剖析。重点涵盖TC3xx芯片平台开发、多核OS、网络管理、存储协议栈等难点问题,提供100+篇原创技术文章。专栏采用付费模式,保证内容完整性和持续更新,并提供专业答疑服务。适合汽车电子工程师系统学习AUTOSAR开发技术。

qq_36056498的博客 6510

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: 【Python】Python3网络爬虫实战-35、Ajax数据爬取
下一篇: 【Python】Python3网络爬虫实战-38、动态渲染页面抓取:Splash的使用
未衬老师
博客等级 码龄7年 231粉丝 212原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值