提取网页中车型年份(如“2011”)的正则表达式实践指南

本文教你如何从Beautiful Soup解析出的文本中精准提取四位数字年份(如2011、2022),结合正则表达式 r"\d{4}" 实现可靠匹配,并融入实际车源爬虫流程,兼顾健壮性与初学者友好性。

本文教你如何从beautiful soup解析出的文本中精准提取四位数字年份(如2011、2022),结合正则表达式 `r"\d{4}"` 实现可靠匹配,并融入实际车源爬虫流程,兼顾健壮性与初学者友好性。

在使用 Beautiful Soup 抓取汽车列表(如 carsdirect.com 的丰田二手车页)时,车型标题通常以 "2022 Toyota Corolla LE" 这类格式呈现。若目标是筛选特定年份车型(例如仅保留 "2011 Highlander"),关键一步是从文本中稳定、准确地提取年份数字——而不能依赖字符串分割或模糊关键词搜索,因为页面结构可能变化、车型名含数字(如“Camry 2.5L”)、或存在多位数里程/价格干扰。

最简洁可靠的方案是使用正则表达式匹配连续4位数字:r"\d{4}"。它能精准捕获年份(如 2011, 2022),同时自动跳过 47,087(里程)、3mi(距离)等非年份数字组合。

以下是在你原有代码基础上增强的完整实现(含错误处理与年份过滤逻辑):

艺映AI

艺映AI - 免费AI视频创作工具

下载

import requests
import re
from bs4 import BeautifulSoup

url = "https://www.carsdirect.com/used_cars/listings/toyota"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"}
page = requests.get(url, headers=headers)
soup = BeautifulSoup(page.content, "html.parser")

results = soup.find(id="mainWrapper")
job_elements = results.find_all("div", class_="infoCell")

# 目标年份(可动态配置)
target_year = "2011"
target_model = "highlander"

for job_element in job_elements:
    try:
        # 提取标题文本(如 "2022 Toyota Corolla LE")
        model_element = job_element.find("p", class_="ymmListRowTitle")
        if not model_element or not model_element.text.strip():
            continue
        title_text = model_element.text.strip()

        # ✅ 使用正则提取首个4位年份(最左优先,符合年份前置惯例)
        year_match = re.search(r"\d{4}", title_text)
        if not year_match:
            continue
        extracted_year = year_match.group(0)

        # 提取车型名(转小写便于忽略大小写)
        model_name = title_text.lower()

        # 筛选:年份匹配 + 车型包含 "highlander"
        if extracted_year == target_year and target_model in model_name:
            ymm_element = job_element.find("p", class_="ymmListRowTrim")
            miles_element = job_element.find("div", class_="mileLine")
            price_element = job_element.find("div", class_="priceLine")

            print(f"✅ 匹配成功:{title_text}")
            print(f"   年份:{extracted_year} | 型号:{ymm_element.text.strip() if ymm_element else 'N/A'}")
            print(f"   里程:{miles_element.text.strip() if miles_element else 'N/A'}")
            print(f"   价格:{price_element.text.strip() if price_element else 'N/A'}\n")

    except AttributeError as e:
        # 跳过缺失关键字段的异常条目(页面结构微调常见)
        continue
    except Exception as e:
        print(f"处理条目时发生未知错误:{e}")
        continue

关键注意事项:

  • ? 不要用 re.findall(...)[0] 替代 re.search(...).group(0):findall 返回列表,空列表取 [0] 会报 IndexError;search 返回 Match 对象或 None,更安全。
  • ? 年份位置不固定? r"\d{4}" 自动匹配任意位置的4位数字,但汽车标题中年份几乎总在最前,因此首匹配即为年份——无需额外定位。
  • ? 避免误匹配:r"[12]\d{3}"(限定1xxx/2xxx)可进一步排除如 9999 等非法年份,但对当前场景非必需;若需严格校验,可追加 1990
  • ? 反爬提示:示例中已添加 User-Agent 头,实际部署建议配合随机 UA、请求间隔及 session 复用,避免被封。

掌握这一模式后,你不仅能筛选 2011 Highlander,还可轻松扩展为多条件组合(如 2010–2015 SUV)、导出 CSV 或存入数据库——这是结构化网页数据清洗的第一块坚实基石。

相关推荐:

路虎揽胜特别版车型“黑骏”上市:取义“汗血宝马”,149.8 万元

7 月 2 日消息,揽胜 RangeRover 公众号今天(2 日)宣布,路虎揽胜特别版车型“黑骏”上市,售价为 149.8 万元。“黑骏”取义“汗血宝马”,车身通体玄黑,并辅以深石榴红配色的内饰。新车采用了一款名为“圣托里尼黑”的车漆,搭配暗色外观套件和 22 英寸 10 辐亮光黑色效果的铝合金轮毂,车内则配备深石榴红色的半苯胺打孔真皮座椅、织物顶篷,以及电吸门、前排座椅按摩 +24 向座椅调节...

比亚迪:天神之眼全系车型性能均优于 L2 辅助驾驶新国标

感谢网友 不一样的体验 的线索投递! 7 月 2 日消息,今天(2 日)上午,比亚迪汽车官微宣布:旗下天神之眼全系车型性能均优于 L2 辅助驾驶新国标。比亚迪还表示,公司作为新国标主要起草单位,深度参与了标准制定。根据介绍,截至 2026 年 5 月 28 日,比亚迪辅助驾驶车型保有量超过 315 万辆,天神之眼辅助驾驶每天生成数据超 2 亿公里,具备最丰富、最真实的中国特色驾驶场景库,并依托云端...

消息称大众新车将适配苹果数字车钥匙服务,具体车型尚不明确

7 月 3 日消息,据科技媒体 MacRumors 昨天报道,苹果服务器端最新代码显示,大众汽车正计划为其未来车型适配苹果 Apple Wallet 数字车钥匙服务。目前我们还无法从代码中发掘更多细节,因此尚不清楚哪些大众新车将适配数字车钥匙、具体上线时间。作为参考,Apple Wallet 数字车钥匙允许用户直接使用 iPhone 或 Apple Watch 解锁 / 锁定车辆,或远程发动车辆、...

小鹏汽车:MONA L03 预售订单量打破小鹏所有车型同期小订纪录

感谢网友 Autumn_Dream 的线索投递! 7 月 2 日消息,在今晚的 MONA L03 中国首秀活动上,小鹏正式公布了 MONA L03 的预售价,14.38 万元起。新车将于 7 月 16 日正式上市。小鹏汽车刚刚发文致谢,称 MONA L03 预售订单量打破小鹏所有车型同期小订纪录。小鹏汽车副总裁 @托马斯电火车 也发文谈及了 MONA L03 的预售“战绩”:和大家同步一个好消息,...

ID.4“接班”车型:大众纯电 ID.途观谍照曝光

7 月 1 日消息,大众 ID.4 已于今年 4 月在美国田纳西州查塔努加工厂停产,工厂随后把产能转向销量更高、符合市场需求的产品,而 ID.4 的现有库存预计仍可满足至 2027 年的当地市场需求。库存售罄后,大众将带来 ID.4 的后继车型 ID.Tiguan(下称 ID.途观)。外媒 Carscoops 今天(1 日)公布了一组谍照,ID.途观的原型车现身阿尔卑斯山区。测试车通过伪装来模仿现...

迷你世界开发者怎么提取收益

1、首先打开迷你盒子,再点击开发者中心;2、就会弹出下面这个图,再点击我的钱包;3、最后就可以看到收益,点击提现就可以提取收益了。要绑定银行卡才能提现,迷你豆不需要,只不过必须要买300m豆才能提现。 详细答案: 1、首先打开迷你盒子,再点击开发者中心。 2、就会弹出下面这个图,再点击我的钱包。 3、最后就可以看到收益,点击提现就可以提取收益了。要绑定银行卡才能提现,迷你豆不需要,只不过必须要买3...

迷你世界保险箱怎么提取

在游戏主界面点击开始游戏,然后选择需要提档的那个游戏进度(非创造模式);进入游戏后按B键打开背包,然后点击右下角“仓库”;在仓库中找到保险箱并双击,然后点击“提取”,这样保险箱就会被提到存档使用了。 详细答案: 在游戏主界面点击开始游戏,然后选择需要提档的那个游戏进度(非创造模式)。 进入游戏后按B键打开背包,然后点击右下角“仓库”。 在仓库中找到保险箱并双击,然后点击“提取”,这样保险箱就会被提...

宙斯浏览器如何提取当前网页内所有的图片素材?

最有效方法是用开发者工具控制台执行脚本提取全部图片URL:涵盖img标签、CSS背景图、Base64内联图和懒加载图片,去重后直接复制下载,无需插件且兼容禁用扩展的办公环境。 你需要从宙斯浏览器打开的网页中一次性拿到所有图片,包括普通标签、CSS背景图、Base64内联图和懒加载图片,而不是一张张右键另存为。 用开发者工具控制台执行脚本提取全部图片URL 这是最轻量、无需安装扩展、且能覆盖绝大多数...