BeautifulSoup返回值与HTML代码显示值不符问题咨询
解决BeautifulSoup解析网页时数据与HTML显示不一致的问题
我之前爬类似汽车类网站的时候也碰到过一模一样的问题,你的情况大概率是网站内容通过JavaScript动态渲染导致的,咱们一步步拆解问题和解决方案:
问题根源
你在浏览器开发者工具里看到的<div class="fieldYear">2013</div>这类内容,是浏览器执行页面JS后才渲染出来的真实数据。但requests.get()只能获取服务器返回的初始静态HTML,里面的内容可能是占位符、加密数据或者未被替换的模板,自然和你看到的浏览器内容不一致。另外你遇到的146脗 520脗 km乱码,其实是编码解码不匹配的小问题,但核心矛盾还是动态渲染的问题。
解决方案:使用支持JS渲染的工具
要拿到真实渲染后的内容,需要模拟浏览器加载页面并等待JS执行完成,这里推荐用selenium(最常用的动态页面爬取工具),步骤如下:
1. 准备工作
- 安装selenium:
pip install selenium - 下载对应浏览器的驱动(比如Chrome浏览器的ChromeDriver,要和你的浏览器版本匹配)
2. 示例代码
from bs4 import BeautifulSoup 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_accueil = "https://www.lacentrale.fr/listing?mileageMax=150000&priceMax=17000&priceMin=5000&yearMin=2012&age=1" # 初始化Chrome浏览器(如果ChromeDriver不在系统PATH里,要指定路径:webdriver.Chrome(executable_path="你的ChromeDriver路径")) driver = webdriver.Chrome() driver.get(URL_accueil) # 等待结果列表加载完成,避免还没渲染好就提取数据 try: # 最多等待10秒,直到resultListContainer元素出现 WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CLASS_NAME, "resultListContainer")) ) except Exception as e: print("页面加载超时,可能是网络或反爬限制:", e) # 获取完全渲染后的页面源码 page_source = driver.page_source # 关闭浏览器 driver.quit() # 现在用BeautifulSoup解析渲染后的源码 soup = BeautifulSoup(page_source, "lxml") result_container = soup.find('div', {"class": "resultListContainer"}) # 提取年份和里程 if result_container: print("提取到的车辆信息:") for item in result_container.find_all('div', class_='fieldYear'): print(f"年份: {item.get_text(strip=True)}") for item in result_container.find_all('div', class_='fieldMileage'): print(f"里程: {item.get_text(strip=True)}") else: print("未找到结果容器,可能页面结构有变化")
补充:编码问题的小技巧
如果之后还碰到乱码,可以试试用page_accueil.text代替page_accueil.content,因为requests的text属性会自动根据响应头解码内容,比直接用二进制的content更省心。不过这个只是辅助,动态渲染才是核心问题。
内容的提问来源于stack exchange,提问作者Houssem
相关产品推荐
相关产品推荐

