如何将BeautifulSoup嵌套元素提取代码转换为Selenium实现提取房产面积数据
Selenium嵌套元素数据提取修改方案
核心思路:Selenium的WebElement实例本身支持子元素查找,你可以直接在每个获取到的clearfix条目元素下,查找对应的inline-group子元素,复用原有文本处理逻辑即可。
修改后可直接运行的代码
from selenium import webdriver from selenium.webdriver.common.by import By # 保留你原有定义的if_area_not_speicified函数即可 PATH = '/Applications/chromedriver' driver = webdriver.Chrome(PATH) driver.get('https://www.imoti.net/bg/obiavi/r/prodava/sofia/?sid=hSrJhL') sqm_area = [] def testing_values(): # 先获取所有class为clearfix的li房源条目 offer_list = driver.find_elements(By.CLASS_NAME, 'clearfix') for one_offer in offer_list: try: # 在当前条目下嵌套查找class为inline-group的div子元素 raw_sqm = one_offer.find_element(By.CLASS_NAME, 'inline-group') # 文本处理逻辑和你原来的BeautifulSoup版本完全一致 get_sqm = raw_sqm.text.split(',')[1].split()[0] sqm_check_value = if_area_not_speicified(get_sqm) sqm_area.append(float(sqm_check_value)) except Exception: # 跳过缺失目标字段的异常条目,避免程序中断 continue testing_values() print(sqm_area) # 执行完成后记得关闭浏览器驱动 driver.quit()
关键改动说明
- 新增导入
By类,Selenium 4.0及以上版本已不再推荐find_elements_by_*的旧写法,统一使用find_element(By.定位方式, 值)的语法,兼容性更强 - 遍历每个房源条目元素时,直接在WebElement实例上调用查找方法,即可实现嵌套元素定位,和BeautifulSoup的
find逻辑完全对应 - 直接用WebElement的
.text属性获取元素文本内容,替代BeautifulSoup的get_text()方法 - 增加异常捕获逻辑,避免个别房源缺失目标元素导致整体程序崩溃
可选兼容方案
如果你更习惯原有BeautifulSoup的写法,无需修改原有提取逻辑,只需要将Selenium渲染后的页面源码传给BeautifulSoup即可:
from bs4 import BeautifulSoup # 省略驱动初始化、打开页面的代码 soup = BeautifulSoup(driver.page_source, 'html.parser') # 接下来直接复用你原来的get_data逻辑即可
内容的提问来源于stack exchange,提问作者tsetsko
相关产品推荐
相关产品推荐

