首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
1.1 HTTP基本原理
1.2 Web 网页基础
1.3 爬虫的基本原理
1.4 Session和Cookie
1.5 代理的基本原理
1.6 多线程和多进程的基本原理
2.1 urllib的使用
2.2 requests的使用
2.3 正则表达式
2.4 httpx的使用
2.5 基础爬虫案例实战
3.1 XPath的使用
3.2 Beautiful Soup的使用
3.3 pyquery的使用
3.4 parsel 的使用
4.1 TXT 文本文件存储
4.2 JSON 文件存储
4.3 CSV 文件存储
4.4 MySQL 存储
4.5 MongoDB 文档存储
4.6 Redis缓存存储
4.7 Elasticsearch 搜索引擎存储
4.8 RabbitMQ 的使用
5.1 什么是 Ajax
5.2 Ajax分析方法
5.3 Ajax 分析与爬取实战
6.1 协程的基本原理
6.2 aiohttp的使用
6.3 aiohttp 异步爬取实战
7.1 Selenium 的使用
7.2 Splash 的使用
7.3 Pyppeteer 的使用
7.4 Playwright 的使用
7.5 Selenium 爬取实战
7.6 Pyppeteer 爬取实战
7.7 CSS 位置偏移反爬案例分析与爬取实战
7.8 字体反爬案例分析与爬取实战
8.1 使用 OCR 技术识别图形验证码
8.2 使用 OpenCV 识别滑动验证码的缺口
8.3 使用深度学习识别图形验证码
8.4 使用深度学习识别滑动验证码的缺口
8.5 使用打码平台识别验证码
8.6 手机验证码的自动化处理
9.1 代理的设置
9.2 代理池的维护
9.3 付费代理的使用
9.4 ADSL 拨号代理的搭建方法
9.5 代理反爬案例爬取实战
10.1 模拟登录的基本原理
10.2 基于Session和Cookie的模拟登录爬取实战
10.3 基于JWT的模拟登录爬取实战
10.4 大规模账号池的搭建
11.1 网站加密和混淆技术简介
11.2 浏览器调试常用技巧
11.3 JavaScript Hook 的使用
11.4 无限 debugger 的原理与绕过
11.5 使用 Python 模拟执行 JavaScript
11.6 使用 Node.js 模拟执行 JavaScript
11.7 浏览器环境下 JavaScript 的模拟执行
11.8 AST 技术简介
11.9 使用 AST 技术还原混淆代码
11.10 特殊混淆案例的还原
11.11 WebAssembly 案例分析和爬取实战
11.12 JavaScript 逆向技巧总结
11.13 JavaScript 逆向爬取实战
当前位置:
首页>>
技术小册>>
Python3网络爬虫开发实战(上)
小册名称:Python3网络爬虫开发实战(上)
### 11.5 使用 Python 模拟执行 JavaScript 在网络爬虫的开发过程中,经常会遇到需要处理由JavaScript动态生成内容的网页。这些网页在初始加载时可能不包含所需的数据,而是依赖于JavaScript在客户端执行后动态地从服务器请求数据并填充到页面中。对于这类情况,传统的HTTP请求方式(如使用`requests`库)无法直接获取到这些数据,因为`requests`库不支持JavaScript的执行。为了解决这一问题,我们需要使用能够模拟浏览器环境并执行JavaScript的工具或库。本章节将详细介绍几种在Python中模拟执行JavaScript的方法。 #### 11.5.1 理解JavaScript渲染的网页 在深入探讨如何在Python中模拟执行JavaScript之前,首先需要理解为什么需要这样做。现代Web开发中,JavaScript扮演着至关重要的角色,它不仅用于提升用户体验(如动画、表单验证等),还常用于动态生成网页内容(如SPA单页应用)、数据交互(通过AJAX)等。这意味着,许多网站的数据并不直接包含在HTML源码中,而是通过JavaScript脚本在浏览器端动态生成和加载。 #### 11.5.2 使用Selenium Selenium是一个用于Web自动化测试的工具,但它同样强大到可以用来模拟浏览器行为,包括执行JavaScript。Selenium支持多种浏览器(如Chrome、Firefox、Edge等),并且提供了丰富的API来控制浏览器,如点击、输入、滚动、等待等。 **安装Selenium和WebDriver** 首先,需要安装Selenium库以及对应浏览器的WebDriver。WebDriver是Selenium的一个组件,它实现了浏览器与Selenium之间的通信。 ```bash pip install selenium ``` 对于Chrome浏览器,需要下载ChromeDriver,并确保其路径被添加到系统的环境变量中,或者在代码中指定其路径。 **基本使用** ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager # 使用webdriver_manager自动管理ChromeDriver driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) # 打开网页 driver.get("https://example.com") # 执行JavaScript driver.execute_script("alert('Hello, Selenium!');") # 查找元素并操作 element = driver.find_element(By.ID, "someElementId") element.click() # 关闭浏览器 driver.quit() ``` #### 11.5.3 使用Puppeteer(通过Pyppeteer) Puppeteer是Google Chrome团队官方出品的一个Node库,它提供了一个高级API来控制Chrome或Chromium浏览器。虽然Puppeteer本身是用Node.js编写的,但可以通过Pyppeteer在Python环境中使用它。 **安装Pyppeteer** ```bash pip install pyppeteer ``` **基本使用** ```python import asyncio from pyppeteer import launch async def main(): browser = await launch() page = await browser.newPage() await page.goto('https://example.com') # 执行JavaScript await page.evaluate('() => alert("Hello, Puppeteer!")') # 关闭浏览器 await browser.close() asyncio.get_event_loop().run_until_complete(main()) ``` 注意:Pyppeteer在使用时需要Chromium环境,且其配置可能相对复杂,尤其是在不同操作系统上。 #### 11.5.4 使用Splash Splash是一个JavaScript渲染服务,它封装了WebKit引擎,并提供了HTTP API,允许用户发送渲染后的HTML或执行JavaScript代码等。Splash可以很方便地集成到Scrapy等Python爬虫框架中。 **安装Splash** Splash通常需要单独部署,可以从其官方GitHub仓库获取安装指导。 **使用Splash执行JavaScript** 假设Splash服务已经运行,可以通过发送HTTP请求来使用它。以下是一个使用`requests`库通过Splash执行JavaScript的示例: ```python import requests import json url = 'http://localhost:8050/render.html' data = { 'url': 'https://example.com', 'js': 'document.title', 'wait': 0.5 } headers = { 'Content-Type': 'application/json' } response = requests.post(url, data=json.dumps(data), headers=headers) result = response.json() print(result['html']) # 如果需要HTML内容 print(result['js_result']) # JavaScript执行结果 ``` 注意:`js`字段中的JavaScript代码应当返回一个值,以便Splash能够捕获并返回。 #### 11.5.5 总结 在处理需要JavaScript渲染的网页时,Python提供了多种工具和库来模拟浏览器行为并执行JavaScript。Selenium以其丰富的API和强大的浏览器控制能力成为首选,尤其适合复杂的网页交互场景。Pyppeteer则为Node.js用户提供了一个在Python中使用Puppeteer的途径,但配置相对复杂。Splash则通过HTTP API提供了简洁的渲染服务,易于集成到现有的爬虫项目中。选择哪种方式取决于具体的需求和场景。 无论使用哪种方法,都需要注意处理好网络请求、异步编程以及可能遇到的JavaScript执行错误等问题。此外,随着Web技术的不断发展,这些工具和库也需要不断更新以适应新的变化。因此,持续学习并关注相关社区的动态是提升爬虫开发能力的重要途径。
上一篇:
11.4 无限 debugger 的原理与绕过
下一篇:
11.6 使用 Node.js 模拟执行 JavaScript
该分类下的相关小册推荐:
剑指Python(磨刀不误砍柴工)
Python合辑7-集合、列表与元组
Python机器学习实战
Python高性能编程与实战
Python与办公-玩转Excel
Python编程轻松进阶(三)
Python机器学习基础教程(下)
实战Python网络爬虫
Python合辑6-字典专题
Python高并发编程与实战
Python合辑3-字符串用法深度总结
Python合辑8-变量和运算符