首页
技术小册
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网络爬虫开发实战(上)
### 7.7 CSS 位置偏移反爬案例分析与爬取实战 在网络爬虫的开发过程中,遇到各种反爬虫策略是家常便饭。其中,CSS位置偏移反爬技术是一种较为隐蔽且有效的防御手段。这种方法通常通过动态调整网页元素的CSS样式(如`position`、`margin`、`transform`等),使得原本易于被自动化工具识别的元素位置发生偏移,甚至完全隐藏,从而增加爬取难度。本章节将深入分析CSS位置偏移反爬的原理,并通过一个实战案例展示如何突破这一障碍,成功爬取目标数据。 #### 7.7.1 CSS位置偏移反爬技术概述 **原理解析**: CSS位置偏移反爬技术的核心在于利用CSS样式动态改变网页上关键信息的显示位置或可见性。例如,通过JavaScript在网页加载完成后或用户交互时动态修改元素的`style`属性,使得原本位于固定位置的数据元素(如商品信息、评论等)在视觉上发生偏移,或者被移动到视口之外,甚至通过`display: none;`或`visibility: hidden;`完全隐藏。这种技术不仅增加了爬虫定位元素的难度,还能有效迷惑简单的基于图像识别的爬虫。 **应用场景**: - 电商平台:防止商品价格、库存等敏感信息被爬虫抓取。 - 新闻网站:防止文章内容被快速聚合或盗用。 - 社交平台:保护用户隐私,防止个人信息泄露。 #### 7.7.2 案例分析 假设我们需要爬取一个电商网站上的商品信息,但该网站采用了CSS位置偏移反爬技术,使得商品详情在页面加载后会随机移动到页面上的不同位置。为了应对这一挑战,我们需要制定一套综合的爬虫策略。 **目标网站特性**: - 商品详情在页面加载后通过JavaScript动态渲染。 - 商品元素的CSS样式(特别是`position`、`transform`属性)频繁变化。 - 网页包含多个相似的商品展示区块,但每个区块内的商品信息位置不同。 #### 7.7.3 爬虫策略设计 **1. 浏览器环境模拟**: 由于JavaScript是动态修改CSS样式的关键,因此需要使用支持JavaScript执行的浏览器环境进行爬虫开发。Selenium是一个常用的工具,它可以模拟真实的浏览器操作,执行JavaScript代码。 **2. 等待元素稳定**: 在尝试抓取元素之前,需要确保页面的所有JavaScript都已执行完毕,并且CSS样式已经稳定。可以通过Selenium的`WebDriverWait`结合`expected_conditions`来等待特定元素的出现或可见性。 **3. 动态元素定位**: 由于元素位置不断变化,传统的XPath或CSS选择器可能不再适用。可以考虑以下策略: - **使用相对定位**:通过已知的、位置相对固定的元素作为参照点,结合JavaScript计算目标元素的相对位置。 - **监听DOM变化**:利用MutationObserver API监控DOM的变动,一旦目标元素的位置发生变化,立即更新其定位信息。 - **图像识别技术**:对于无法通过常规方法定位的元素,可以尝试使用图像识别库(如OpenCV结合Python的Pillow库)来识别屏幕上的特定图像,并据此定位元素。 **4. 数据抓取与解析**: 一旦成功定位到目标元素,就可以使用Selenium或BeautifulSoup等工具来抓取并解析数据。注意,如果网页数据是通过AJAX请求获取的,还需要分析并模拟这些请求。 #### 7.7.4 实战步骤 **步骤一:环境准备** - 安装Python及其相关库(如Selenium、Pillow)。 - 下载并配置合适的WebDriver(如ChromeDriver)。 **步骤二:编写爬虫脚本** ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.action_chains import ActionChains import time # 启动WebDriver driver = webdriver.Chrome() driver.get('目标网站URL') # 等待页面加载完成 WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, '某个已知元素的ID'))) # 这里假设我们需要通过JavaScript和相对定位来找到目标元素 # 这里仅展示框架,具体实现需根据实际情况调整 # ... # 假设我们已经通过某种方式定位到了目标元素 target_element = driver.find_element_by_... # 使用合适的定位方法 # 读取并处理数据 data = target_element.text print(data) # 清理资源 driver.quit() ``` **步骤三:调试与优化** - 在实际运行中,可能会遇到JavaScript执行速度不一、元素定位失败等问题,需要不断调试和优化脚本。 - 考虑加入异常处理机制,增强脚本的健壮性。 - 评估爬虫对目标网站的影响,避免过于频繁的请求导致IP被封禁。 #### 7.7.5 总结 CSS位置偏移反爬技术虽然增加了爬取的难度,但通过合理的策略和技术手段,我们仍然可以成功突破这一障碍。在实际应用中,需要结合具体的网站特性和反爬机制,灵活运用Selenium、JavaScript执行、DOM监听、图像识别等多种技术,实现高效、稳定的数据爬取。同时,也要遵守法律法规和网站的使用协议,合理合法地使用爬虫技术。
上一篇:
7.6 Pyppeteer 爬取实战
下一篇:
7.8 字体反爬案例分析与爬取实战
该分类下的相关小册推荐:
Python数据分析与挖掘实战(下)
Python高并发编程与实战
剑指Python(磨刀不误砍柴工)
Python爬虫入门与实战开发(下)
Python合辑7-集合、列表与元组
Python爬虫入门与实战开发(上)
Python神经网络入门与实践
Python合辑1-Python语言基础
Python编程轻松进阶(三)
Python编程轻松进阶(二)
Python编程轻松进阶(一)
Python合辑6-字典专题