如何用Python的Selenium以简洁Pythonic风格实现租房公寓信息抓取并生成字典列表
更Pythonic的Selenium租房信息抓取实现
嘿,我来帮你把这段租房信息抓取的代码改得更简洁、更符合Python风格!咱们可以把单页信息提取的逻辑封装成函数,再结合列表推导式替代冗长的循环,同时处理好元素缺失的异常情况,让代码既简洁又健壮。
优化后的代码示例
from selenium.common.exceptions import NoSuchElementException # 提前定义需要的目标字段及默认值,确保最终字典不会缺失key REQUIRED_FIELDS = { 'Property type': 'not available', 'room': 'not available', 'Floor': 'not available', 'Living space': 'not available', 'Year of construction': 'not available' } def extract_apartment_info(driver, link): """提取单个公寓页面的关键信息""" driver.get(link) temp_data = {} try: # 获取键和对应值的元素列表 header_elements = driver.find_elements_by_class_name("css-cyiock.excbu0j2") value_elements = driver.find_elements_by_class_name("css-1ush3w6.excbu0j2") # 将元素文本配对成临时字典 temp_data = {h.text.strip(): v.text.strip() for h, v in zip(header_elements, value_elements)} except NoSuchElementException: # 若元素找不到,直接返回默认值字典 pass # 合并默认字段与抓取到的数据,缺失字段自动保留默认值 apartment_info = REQUIRED_FIELDS.copy() apartment_info.update(temp_data) return apartment_info # 用列表推导式生成最终的字典列表,简洁直观 key_data = [extract_apartment_info(driver, link) for link in links]
核心优化点
- 函数封装:把单页信息提取的逻辑独立成函数,代码更模块化,可读性和复用性大幅提升
- 列表推导式:替代传统
for循环加append的写法,完全贴合Python简洁的语法风格 - 默认值兜底:提前定义必填字段的默认值,确保最终每个字典都包含你需要的所有key
- 异常处理:捕获元素找不到的异常,避免单个页面出错导致整个抓取流程中断
这样写出来的代码既简洁易读,又能应对页面结构不一致的情况,完美满足你的需求!
内容的提问来源于stack exchange,提问作者Stash
相关产品推荐
相关产品推荐

