如何用Python爬虫获取span标签内的style属性值?
问题解决:动态渲染导致爬取的HTML缺失style属性
问题原因
你遇到的是动态内容渲染问题:浏览器中看到的style属性是页面加载后由JavaScript动态添加的,而requests只能获取服务器返回的静态初始HTML,无法捕获JS执行后的DOM变化,所以爬取到的span标签没有style属性。
解决方案:使用模拟浏览器执行JS
用支持JavaScript渲染的工具(比如Selenium)来获取完整的页面内容,下面是示例代码:
- 先安装依赖:
pip install selenium
同时需要下载对应浏览器的驱动(比如ChromeDriver),确保驱动版本和浏览器版本匹配。
- 完整代码:
from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver.chrome.options import Options # 配置无头模式(无需打开可视化浏览器窗口) chrome_options = Options() chrome_options.add_argument("--headless=new") # 启动浏览器并加载页面 driver = webdriver.Chrome(options=chrome_options) driver.get('https://www.ilmakiage.co.il/mineral-lip-pencil-4043') # 获取JS执行后的完整页面源码 page_source = driver.page_source driver.quit() # 解析页面 soup = BeautifulSoup(page_source, 'lxml') # 遍历所有目标span,判断显示状态 for span in soup.find_all('span', class_='qtyValidate_color'): style_attr = span.get('style', '') if 'display: block' in style_attr: print("Ooops, 'הכמות המבוקשת אינה קיימת' the stock is empty. Open the app later. You will see the 'Shopping time' phrase when the lipstick be in stock") break else: print('Shopping time')
额外思路
如果想更高效,也可以通过浏览器开发者工具的「网络」面板,分析网站获取库存状态的AJAX接口,直接调用接口获取数据,避免模拟浏览器的开销。
内容的提问来源于stack exchange,提问作者Roma Shakshuka
相关产品推荐
相关产品推荐

