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

使用BeautifulSoup提取列表时保留URL属性并捕获日期的技术问题

解决方法

核心问题分析

你当前代码的主要问题:

  • 错误地通过<span>标签提取内容,但目标页面的<li>里并没有<span>,导致无法拿到正确的part1和part2
  • 没处理日期标签(h3)与对应<li>的关联逻辑
  • 未提取<a>标签的href属性

修正后的代码

from bs4 import BeautifulSoup
import pandas as pd

with open("myfile.html", "r") as og_file:
    page = og_file.read()

soup = BeautifulSoup(page, "html5lib")

# 存储最终数据
scrape_data = []
current_date = ""

# 遍历所有h3和li元素,跟踪当前日期
for element in soup.find_all(['h3', 'li']):
    if element.name == 'h3':
        # 更新当前日期,去除多余空格
        current_date = element.text.strip()
    elif element.name == 'li':
        # 提取part1:冒号前的文本
        part1 = element.text.split(':')[0].strip()
        # 找到li里的a标签
        a_tag = element.find('a')
        if a_tag:
            part2 = a_tag.text.strip()
            url = a_tag.get('href')
            # 将数据加入列表
            scrape_data.append({
                "date": current_date,
                "part1_of_rowN": part1,
                "Part2_of_rowN": part2,
                "url_for_rowN": url
            })

# 生成DataFrame并保存为CSV
df = pd.DataFrame(scrape_data)
df.to_csv('scrape.csv', index=False)

代码说明

  • 遍历页面中的h3和li元素,遇到h3就更新当前日期,确保后续的li都关联正确的日期(如果页面里的日期标签是<h2>而非<h3>,把代码中的['h3', 'li']改成['h2', 'li']即可)
  • 对每个li,通过冒号拆分获取part1,再直接从<a>标签提取文本和链接
  • 最终生成符合需求的四列CSV,自动忽略没有<a>标签的无效li(如果有的话)

内容的提问来源于stack exchange,提问作者cube-convict

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 07:58:20