如何用Python和BeautifulSoup从网页表格爬取车型款型与价格
爬取CarandDriver网站Hyundai Ioniq 5车型款型与价格的技术指导
需求说明
刚接触编程,需要爬取caranddriver.com网站中Hyundai Ioniq 5页面的车型款型及价格,期望输出格式如下:
SE, $42,000
SEL, $48,000
Limited, $53,000
当前代码问题分析
你提供的代码尝试通过定位<g class="trims">下的<foreignObject>元素提取数据,但大概率无法正常工作,原因可能是:
- 网站DOM结构已更新,目标元素的标签或类名发生了变化
- 款型与价格数据是通过JavaScript动态渲染的,直接用
requests获取的静态HTML中不存在这些元素
修正方案
方案1:静态HTML爬取(数据存在于静态源码时)
重新分析页面静态HTML结构,更换正确的选择器。以下是调整后的代码:
from bs4 import BeautifulSoup import requests # 目标URL URL = 'https://www.caranddriver.com/hyundai/ioniq-5' try: # 发送请求并获取页面内容 response = requests.get(URL) response.raise_for_status() soup = BeautifulSoup(response.text, 'lxml') # 示例选择器(需根据实际页面结构调整) # 假设款型和价格在class为"trim-item"的容器中 trim_items = soup.find_all('div', class_='trim-item') for item in trim_items: # 提取款型名称并去除多余空格 trim_name = item.find('h3', class_='trim-name').text.strip() # 提取价格并去除多余空格 trim_price = item.find('span', class_='trim-price').text.strip() # 按期望格式输出 print(f"{trim_name}, {trim_price}") except requests.exceptions.RequestException as e: print(f"请求出错: {e}") except AttributeError: print("未找到目标元素,请检查页面结构或选择器是否正确")
方案2:处理动态渲染内容(数据由JS加载时)
如果静态HTML中没有目标数据,说明内容是动态渲染的,需要使用selenium模拟浏览器加载页面:
- 先安装selenium:
pip install selenium
下载对应浏览器的驱动(如ChromeDriver),并配置到环境变量中
示例代码:
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 URL = 'https://www.caranddriver.com/hyundai/ioniq-5' # 初始化Chrome浏览器驱动 driver = webdriver.Chrome() driver.get(URL) try: # 等待目标元素加载完成(最长等待10秒) trim_elements = WebDriverWait(driver, 10).until( EC.presence_of_all_elements_located((By.CLASS_NAME, 'trim-item')) ) for element in trim_elements: trim_name = element.find_element(By.CLASS_NAME, 'trim-name').text.strip() trim_price = element.find_element(By.CLASS_NAME, 'trim-price').text.strip() print(f"{trim_name}, {trim_price}") finally: # 关闭浏览器 driver.quit()
注意事项
- 网站可能有反爬机制,爬取时需控制请求频率,避免IP被封禁
- 定期检查页面结构,若网站更新DOM,需同步调整选择器
内容的提问来源于stack exchange,提问作者JAA
相关产品推荐
相关产品推荐

