1. 为什么现代爬虫必须处理JavaScript渲染?
十年前我刚入行做爬虫时,90%的网站直接用requests库就能搞定。但现在打开Chrome开发者工具随便看个电商网站,你会发现初始HTML里都是<div id="app"></div>这类空壳,真实数据全是通过JavaScript动态加载的。这就是为什么传统爬虫在2023年已经举步维艰——它们拿到的只是个空壳页面。
上周我帮朋友爬取某奢侈品电商的价格数据,用requests+BeautifulSoup组合怎么都拿不到商品信息。后来用浏览器手动访问才发现,所有商品数据都是通过XHR请求异步加载的,页面初始HTML里只有加载动画的SVG代码。这种场景下,就必须上能执行JavaScript的爬虫方案了。
2. Selenium的核心工作原理
2.1 浏览器自动化引擎
Selenium本质上是个遥控器。它通过WebDriver协议与真实浏览器对话,比如:
from selenium import webdriver driver = webdriver.Chrome() # 启动一个完整的Chrome实例 driver.get("https://example.com") # 所有JS都会被执行 html = driver.page_source # 获取渲染后的完整DOM这个过程中,Chrome浏览器会像正常用户访问一样:
- 下载HTML文档
- 解析并执行所有