首页
技术小册
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.13 JavaScript 逆向爬取实战 在Python网络爬虫的开发过程中,遇到由JavaScript动态生成内容的网页是一个常见的挑战。这类网页通常通过AJAX请求、WebSockets、Fetch API或其他前端技术异步加载数据,使得传统的HTML解析方法(如BeautifulSoup、lxml等)难以直接捕获到完整的数据。因此,掌握JavaScript逆向爬取技术成为了高级爬虫开发者必备的技能之一。本章节将深入探讨JavaScript逆向爬取的实战技巧,包括分析JavaScript执行环境、模拟AJAX请求、处理JavaScript渲染的DOM等。 #### 1. 理解JavaScript逆向爬取的概念 JavaScript逆向爬取,简而言之,是指通过分析网页中的JavaScript代码,理解其动态加载数据的机制,然后使用Python等工具模拟这一过程以获取数据的过程。这要求开发者具备一定的JavaScript基础知识,能够理解AJAX请求、Promise、async/await等异步编程概念,并能够使用开发者工具(如Chrome DevTools)进行网络请求分析和DOM调试。 #### 2. 环境准备 - **Python环境**:确保安装了Python及必要的库,如requests、selenium、pyppeteer(或pyppeteer-py)等。 - **浏览器及开发者工具**:推荐使用Chrome浏览器,其开发者工具功能强大,便于分析网络请求和DOM结构。 - **Node.js环境**(可选):对于复杂的JavaScript环境或需要深入理解JS执行逻辑时,可能需要在Node.js环境下运行JavaScript代码或使用相关工具。 #### 3. 分析网页加载机制 - **使用Chrome DevTools**:打开Chrome浏览器,按F12打开开发者工具,切换到“Network”标签页,开启“Preserve log”以保留所有请求记录。刷新页面,观察哪些请求是在页面加载过程中动态发起的,特别是那些返回JSON或HTML片段的请求。 - **识别关键请求**:根据请求的类型(如XHR、Fetch等)、URL模式、请求参数和响应内容,确定哪些请求是获取所需数据的关键请求。 - **分析请求参数**:许多动态请求依赖于复杂的参数,这些参数可能是由JavaScript动态生成的。使用“Sources”标签页中的“Breakpoints”功能,在发起请求的函数上设置断点,逐步执行以理解参数生成逻辑。 #### 4. 模拟AJAX请求 一旦识别出关键请求及其参数生成逻辑,就可以使用Python的requests库或其他HTTP客户端库来模拟这些请求。 - **构造请求头**:复制浏览器发送请求时的请求头(如User-Agent、Cookies等),确保模拟请求与真实请求尽可能一致。 - **生成请求参数**:根据第3步中分析得到的参数生成逻辑,用Python代码实现相同的逻辑以生成请求参数。 - **发送请求并处理响应**:使用requests库发送请求,并根据响应内容(通常是JSON格式)提取所需数据。 #### 5. 应对反爬虫策略 - **动态Cookies**:如果请求依赖于Cookies中的某些值,而这些值又是由JavaScript动态生成的,可以通过分析Cookies的生成逻辑或使用Selenium等工具来自动获取Cookies。 - **用户代理(User-Agent)**:确保请求中的User-Agent与浏览器发送的一致,或者随机选择一个常见的User-Agent以避开简单的检测。 - **验证码处理**:如果请求触发了验证码,可能需要结合OCR技术或人工干预来解决。 - **频率限制**:合理设置请求间隔,避免因请求过于频繁而被服务器封禁。 #### 6. 使用Selenium进行复杂页面的爬取 对于JavaScript执行环境复杂、难以直接模拟AJAX请求的网页,可以使用Selenium库来控制浏览器自动执行JavaScript代码。 - **安装Selenium**:通过pip安装Selenium库,并下载对应的WebDriver(如ChromeDriver)。 - **编写Selenium脚本**:使用Selenium提供的API模拟用户操作(如点击、输入等),等待页面元素加载完成,然后提取所需数据。 - **处理JavaScript渲染的DOM**:Selenium可以直接操作由JavaScript渲染后的DOM,使得提取数据变得更加简单直接。 #### 7. 实战案例分析 假设我们需要从一个使用React框架开发的电商网站上爬取商品信息,该网站通过Fetch API异步加载商品列表。 - **步骤一**:使用Chrome DevTools分析网络请求,找到加载商品列表的Fetch请求。 - **步骤二**:分析请求参数,特别是那些看起来像是动态生成的参数。 - **步骤三**:编写Python代码,使用requests库模拟该Fetch请求,构造请求头和请求参数。 - **步骤四**:处理响应数据,提取商品信息。 - **步骤五**(可选):如果直接模拟请求遇到困难,可以使用Selenium控制浏览器执行JavaScript代码,加载并提取数据。 #### 8. 注意事项 - **尊重网站版权和robots.txt协议**:在进行爬取前,务必确认有权访问和使用目标网站的数据,并遵守其robots.txt文件中的规定。 - **避免给目标网站造成不必要的负担**:合理设置请求频率,避免对目标网站造成过大压力。 - **数据隐私和安全**:处理爬取到的数据时,注意保护用户隐私和数据安全。 #### 9. 总结 JavaScript逆向爬取是一项复杂但强大的技术,它允许爬虫开发者突破传统HTML解析的局限,从动态加载的网页中提取数据。通过掌握JavaScript逆向爬取技术,开发者可以更加灵活地应对各种复杂的网络爬虫需求。然而,这也要求开发者具备扎实的编程基础、良好的问题解决能力和持续学习的精神。希望本章节的内容能够为你的Python网络爬虫开发之路提供一些有益的启示和帮助。
上一篇:
11.12 JavaScript 逆向技巧总结
该分类下的相关小册推荐:
Python爬虫入门与实战开发(下)
Python编程轻松进阶(二)
Python机器学习基础教程(上)
Python甚础Django与爬虫
Python合辑9-判断和循环
剑指Python(磨刀不误砍柴工)
剑指Python(万变不离其宗)
Python与办公-玩转Word
机器学习算法原理与实战
Python合辑12-面向对象
Python面试指南
Python与办公-玩转PDF