首页
技术小册
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.3 JavaScript Hook 的使用 在网络爬虫的开发过程中,经常会遇到动态加载内容的网页,这些内容不是通过服务器直接返回的HTML文档一次性加载完成的,而是通过JavaScript(JS)在客户端执行后动态添加到DOM(文档对象模型)中的。传统的爬虫方法,如直接解析HTTP响应的HTML内容,往往无法捕获这些动态生成的数据。因此,掌握JavaScript Hook的使用技巧,对于实现高效、全面的网络爬虫至关重要。 #### 11.3.1 理解JavaScript Hook JavaScript Hook,简而言之,就是在JavaScript代码执行的关键点插入自定义代码(称为钩子)以监视或修改其行为的技术。在网络爬虫中,我们利用这种技术来捕获网页加载过程中的动态数据。具体来说,我们可以在浏览器环境中运行自定义JS脚本,利用浏览器的开发者工具(如Chrome的DevTools)或者自动化测试框架(如Selenium、Puppeteer等)来执行这些脚本。 #### 11.3.2 为什么需要JavaScript Hook 1. **动态内容捕获**:许多现代网站使用AJAX(Asynchronous JavaScript and XML)请求来动态加载内容,如用户评论、商品详情等。传统的HTTP请求-响应模式无法直接获取这些数据。 2. **反爬虫机制绕过**:一些网站为了防止内容被爬虫抓取,会设置复杂的反爬虫机制,如检测用户行为模式、动态生成验证码等。通过模拟用户行为,JavaScript Hook可以帮助我们绕过这些限制。 3. **页面交互模拟**:某些网页内容需要通过用户交互(如点击、滚动、输入等)才能显示。JavaScript Hook能够模拟这些交互,从而获取完整的数据。 #### 11.3.3 实现JavaScript Hook的方法 ##### 1. 使用浏览器的开发者工具 浏览器的开发者工具(如Chrome DevTools)提供了强大的调试和脚本执行功能。我们可以利用Console面板来执行自定义的JS代码,通过监听DOM变化、网络请求等方式捕获动态数据。 - **监听DOM变化**:使用`MutationObserver` API来监听DOM树的变动。当目标元素的内容发生变化时,可以触发回调函数来捕获这些变化。 - **拦截网络请求**:通过Network面板查看和分析网络请求,甚至可以修改请求参数或响应内容。虽然这不是直接修改JavaScript执行流程,但对于理解数据加载机制非常有帮助。 ##### 2. 自动化测试框架 自动化测试框架(如Selenium、Puppeteer等)提供了模拟浏览器行为的能力,可以在这些框架中执行自定义的JavaScript代码。 - **Selenium**:Selenium支持多种浏览器和编程语言,通过WebDriver与浏览器交互,可以模拟用户点击、输入等操作,并运行JS脚本。 - **Puppeteer**:Puppeteer是Google Chrome团队开发的Node库,它提供了一个高级API来控制Chrome或Chromium浏览器。使用Puppeteer,我们可以方便地执行JS代码,监听页面事件,并捕获动态数据。 ##### 3. 注入自定义JS脚本 在一些情况下,我们可以直接向网页中注入自定义的JS脚本。这可以通过修改浏览器配置、使用浏览器插件或扩展、或者通过自动化测试框架实现。 - **浏览器插件/扩展**:开发或修改浏览器插件/扩展,在网页加载时自动注入自定义JS脚本。 - **通过代理服务器**:设置HTTP代理服务器,在请求响应的HTML内容中插入自定义JS脚本。 #### 11.3.4 实战案例:抓取动态加载的商品信息 假设我们需要从一个电商平台抓取动态加载的商品信息,这些信息在用户滚动页面时通过AJAX请求加载。我们可以使用Puppeteer来实现这一需求。 1. **环境准备**:安装Node.js和Puppeteer。 2. **编写脚本**: ```javascript const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto('https://example.com/products'); // 监听网络请求 page.on('request', (req) => { if (req.url().includes('api/products')) { req.continue(() => { return req.response().json().then(response => { console.log('Product data:', response); }); }); } }); // 模拟滚动加载更多商品 async function scrollPage() { for (let i = 0; i < 10; i++) { await page.evaluate(() => { window.scrollTo(0, document.body.scrollHeight); }); await new Promise(resolve => setTimeout(resolve, 2000)); // 等待数据加载 } } await scrollPage(); await browser.close(); })(); ``` 在这个脚本中,我们首先使用Puppeteer打开目标网页,并监听所有网络请求。当检测到包含特定API路径的请求时,我们解析响应的JSON数据并打印出来。同时,通过模拟滚动页面来触发更多的AJAX请求,从而加载更多商品信息。 3. **运行脚本**:在命令行中运行上述Node.js脚本,即可看到控制台输出的商品数据。 #### 11.3.5 注意事项 - **遵守法律法规**:在编写爬虫时,务必遵守相关法律法规和网站的服务条款,尊重网站的数据版权和隐私政策。 - **合理使用资源**:避免过于频繁地请求网站,以免给网站服务器造成不必要的负担。 - **异常处理**:在编写爬虫时,应充分考虑各种异常情况,如网络请求失败、数据格式异常等,并给出相应的处理策略。 通过掌握JavaScript Hook的使用技巧,我们可以更加灵活地应对各种复杂的网络爬虫需求,实现高效、稳定的数据抓取。
上一篇:
11.2 浏览器调试常用技巧
下一篇:
11.4 无限 debugger 的原理与绕过
该分类下的相关小册推荐:
Python编程轻松进阶(四)
Python与办公-玩转PPT
实战Python网络爬虫
Python爬虫入门与实战开发(上)
Python编程轻松进阶(三)
Python合辑6-字典专题
Python与办公-玩转Excel
Python合辑2-字符串常用方法
Python合辑12-面向对象
剑指Python(磨刀不误砍柴工)
Python与办公-玩转Word
Python与办公-玩转PDF