使用Beautiful Soup提取网页价格返回None,求助排查问题
问题分析与解决
你的代码返回None,大概率是以下两种原因:
1. 页面价格是JS动态渲染的
requests.get()只能获取网页的静态HTML源码,如果目标价格是通过JavaScript动态加载的,静态源码里根本没有woocommerce-Price-amount amount这个类的元素,自然找不到。
验证方法:打印response.text,搜索字符串woocommerce-Price-amount amount,如果搜不到,就说明是动态加载问题。
解决办法:用Selenium这类工具模拟浏览器加载页面(浏览器会自动执行JS渲染内容),示例代码如下:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager URL = "https://shop.beobasta.rs/proizvod/smrznuti-spanac/" # 自动安装并启动Chrome浏览器 driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) driver.get(URL) # 定位价格元素并打印文本 price_element = driver.find_element(By.CLASS_NAME, "woocommerce-Price-amount.amount") print(price_element.text) # 关闭浏览器 driver.quit()
2. 元素选择器不准确
可能网页结构更新,目标元素的class名称或标签类型发生了变化。
验证方法:打开目标网页,按F12打开开发者工具,用元素定位工具找到价格元素,核对它的标签和class是否还是span.woocommerce-Price-amount.amount。如果不是,修改代码里的find()参数即可。
比如如果现在价格元素的class变成了new-price-class,就改成:
price_element = soup.find("span", class_="new-price-class")
内容的提问来源于stack exchange,提问作者luna28blue
相关产品推荐
相关产品推荐

