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

如何从同class名的网页元素中提取指定格式的日期?

提取目标日期的两种实现方案

问题背景

爬取网站时,存在多个class为rr的div元素,数量随页面变化。需提取格式如24 January 2020的日期,该日期位于<b>标签内,当前目标日期在最后一个rr类div中。

解决方案

方法一:直接定位最后一个目标元素

利用列表索引获取最后一个rr类div,再提取其中<b>标签的文本内容:

# 获取最后一个rr类div元素
last_rr_div = items_list[-1]
# 提取b标签内的日期文本
target_date = last_rr_div.find('b').text.strip()
print(target_date)  # 输出:24 January 2020

方法二:正则匹配日期格式(更鲁棒)

如果后续页面结构调整,日期位置发生变化,正则匹配能确保精准提取符合格式的日期:

# 定义匹配目标日期格式的正则表达式
date_pattern = re.compile(r'\d{1,2} [A-Za-z]+ \d{4}')

target_date = None
# 遍历所有rr类div,查找符合格式的日期
for div in items_list:
    for b_tag in div.find_all('b'):
        text = b_tag.text.strip()
        # 完全匹配日期格式
        if date_pattern.fullmatch(text):
            target_date = text
            break
    if target_date:
        break

print(target_date)  # 输出:24 January 2020

完整可运行代码

import pandas as pd
import numpy as np
import requests
from bs4 import BeautifulSoup
import re
from user_agent import generate_user_agent
import time
import os  # 补充os模块导入,适配generate_user_agent参数

my_user_agent = generate_user_agent(os=('mac', 'linux'))

headers = {
    "Accept": "*/*",
    "user-agent": my_user_agent
}

source = 'https://coronavirus-graph.ru/kanada'
req = requests.get(source, headers=headers)
html = req.content
soup = BeautifulSoup(html, 'lxml')
items_list = soup.find_all('div', class_='rr')

# 方法一执行
last_rr_div = items_list[-1]
target_date_1 = last_rr_div.find('b').text.strip()
print("方法一结果:", target_date_1)

# 方法二执行
date_pattern = re.compile(r'\d{1,2} [A-Za-z]+ \d{4}')
target_date_2 = None
for div in items_list:
    for b_tag in div.find_all('b'):
        text = b_tag.text.strip()
        if date_pattern.fullmatch(text):
            target_date_2 = text
            break
    if target_date_2:
        break
print("方法二结果:", target_date_2)

方案对比

  • 方法一:代码简洁,依赖当前页面结构,若后续页面调整日期位置则失效。
  • 方法二:通过格式匹配定位日期,不受元素位置影响,适应性更强,适合长期使用。

内容的提问来源于stack exchange,提问作者kostya ivanov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:25:35