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

如何使用BeautifulSoup从指定URL提取网页列表中的日期等目标内容?

香港教育局新闻稿日期字段提取方案

你要爬的页面里,每条新闻的所有信息都包裹在class="card card-body mb-3"的div容器中,每个容器内第一列固定存放发布日期,第二列就是你已经提取到的标题<a>标签。以下是两种实现思路:

方案1:按单条新闻容器遍历(推荐,无数据错位风险)

这种方式直接以每条新闻的父容器为单位提取所有字段,不会出现日期和标题对应不上的问题,比单独遍历a标签更可靠:

  • 第一步用find_all定位所有新闻父容器
  • 对每个父容器分别提取日期、标题、链接三个字段
  • 把结果存储为字典列表后可直接转pandas DataFrame

示例代码:

from bs4 import BeautifulSoup
import requests
import pandas as pd

# 请求页面
url = "https://www.edb.gov.hk/en/about-edb/press/press-releases/index.html"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")

news_list = []
# 遍历所有新闻条目容器
for item in soup.find_all("div", class_="card card-body mb-3"):
    # 提取日期
    release_date = item.find("div", class_="col-auto pe-0 text-nowrap").get_text(strip=True)
    # 提取标题和链接
    title_tag = item.find("a", href=True)
    title = title_tag.get_text(strip=True)
    # 拼接完整链接
    full_url = f"https://www.edb.gov.hk{title_tag['href']}" if title_tag["href"].startswith("/") else title_tag["href"]
    # 加入结果列表
    news_list.append({
        "release_date": release_date,
        "title": title,
        "url": full_url
    })

# 转pandas DataFrame
df = pd.DataFrame(news_list)
# 可按需把日期转成标准时间格式
df["release_date"] = pd.to_datetime(df["release_date"], format="%d.%m.%Y")
print(df.head())

方案2:使用:nth-of-type选择器匹配日期

如果你不想修改之前单独遍历a标签的逻辑,可以用css选择器直接批量提取所有日期节点,和你已有的标题、链接列表按索引一一对应:

  • 日期的css选择器可以写为div.card.card-body.mb-3 > div.row > div:nth-of-type(1),含义是每个新闻容器下的行里第一个div就是日期字段
  • 批量提取日期的代码:
date_list = [d.get_text(strip=True) for d in soup.select("div.card.card-body.mb-3 > div.row > div:nth-of-type(1)")]
  • 你之前提取到的标题列表、链接列表和date_list长度完全一致,按相同索引配对即可。

注意:优先选方案1,若页面后续有结构调整(比如插入了广告位),方案2的索引配对可能出现错位。

内容的提问来源于stack exchange,提问作者Jamo T

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:54:03