You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求协助:基于Python实现英国车辆查询网站数据爬取与存储

使用Python爬取英国车辆查询网站并存储数据到数据库

核心思路

该网站涉及多步交互(输入车牌→确认车辆归属),且存在JS渲染逻辑,优先用Selenium处理页面交互,配合BeautifulSoup提取目标内容,最后用SQLite(轻量易实现)存储数据。

所需依赖

先安装必要包:

pip install selenium beautifulsoup4

注意:需下载对应浏览器的Driver(如ChromeDriver),确保版本与浏览器匹配。

步骤1:模拟页面交互

实现输入车牌、提交表单及确认车辆归属的流程:

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
import time

# 初始化Chrome浏览器
driver = webdriver.Chrome()
driver.get("https://vehicleenquiry.service.gov.uk/")

# 等待车牌号输入框加载并输入车牌
plate_input = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "Vrm"))
)
plate_input.send_keys("AB12CDE")  # 替换为目标车牌号

# 提交表单
submit_btn = driver.find_element(By.CSS_SELECTOR, 'button[type="submit"]')
submit_btn.click()

# 等待确认按钮加载并点击(元素选择器需根据页面实际调整)
confirm_btn = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, 'button[data-testid="confirm-vehicle"]'))
)
confirm_btn.click()

# 等待目标页面加载完成
time.sleep(2)
page_source = driver.page_source
driver.quit()

步骤2:提取指定颜色的文本

用BeautifulSoup解析页面,筛选红色、黄色、绿色文本:

from bs4 import BeautifulSoup

soup = BeautifulSoup(page_source, 'html.parser')

# 目标颜色对应的十六进制值(需对照页面实际样式调整)
target_colors = {
    "red": "#dc3545",
    "yellow": "#ffc107",
    "green": "#28a745"
}

color_texts = {}
for color_name, rgb in target_colors.items():
    # 筛选所有style属性包含对应颜色的元素
    elements = soup.find_all(style=lambda val: val and f"color:{rgb}" in val.lower())
    color_texts[color_name] = [elem.get_text(strip=True) for elem in elements if elem.get_text(strip=True)]

print("红色文本:", color_texts["red"])
print("黄色文本:", color_texts["yellow"])
print("绿色文本:", color_texts["green"])

注:若页面用RGB或颜色名称定义文本颜色,需同步修改target_colors中的值。

步骤3:存储到数据库

以SQLite为例,创建表并插入提取的数据:

import sqlite3
import json

# 连接数据库(不存在则自动创建)
conn = sqlite3.connect("vehicle_data.db")
cursor = conn.cursor()

# 创建车辆信息表
cursor.execute('''
CREATE TABLE IF NOT EXISTS vehicle_info (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    plate_number TEXT NOT NULL,
    red_text TEXT,
    yellow_text TEXT,
    green_text TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')

# 插入数据(用JSON格式存储多段文本)
cursor.execute('''
INSERT INTO vehicle_info (plate_number, red_text, yellow_text, green_text)
VALUES (?, ?, ?, ?)
''', (
    "AB12CDE",
    json.dumps(color_texts["red"]),
    json.dumps(color_texts["yellow"]),
    json.dumps(color_texts["green"])
))

conn.commit()
conn.close()

注意事项

  • 反爬规避:添加随机等待时间、更换User-Agent,避免短时间内频繁请求触发风控。
  • 元素更新:页面元素的ID、选择器可能变动,需定期检查调整代码定位逻辑。
  • 合法性:确保爬取行为符合网站robots.txt及当地数据保护法规,禁止未经授权的批量爬取。

内容的提问来源于stack exchange,提问作者Satyam Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 10:25:23