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

使用Python BS4爬取CVPR2021页面:提取表单ID值求助

解决方法

首先修正你的标题选择器写法,soup.select('dt', {'class' : 'ptitle'})不符合CSS选择器规范,应该用dt.ptitle来选择class为ptitle的dt标签。接下来,每个标题对应的dd标签是dt的下一个兄弟节点,我们可以通过find_next_sibling方法获取,再从中提取form的id值。

完整代码如下:

import requests, bs4

url = "https://openaccess.thecvf.com/CVPR2021?day=all"
webpage = requests.get(url)
soup = bs4.BeautifulSoup(webpage.content, 'html.parser')

# 正确选择所有class为ptitle的dt标签
title_dts = soup.select('dt.ptitle')
title_form_dict = {}

for title_dt in title_dts:
    # 获取当前dt对应的下一个dd兄弟标签
    dd_tag = title_dt.find_next_sibling('dd')
    if not dd_tag:
        continue  # 如果没有对应的dd,跳过
    
    # 在dd标签里找到form元素
    form_tag = dd_tag.find('form')
    if not form_tag or 'id' not in form_tag.attrs:
        continue  # 如果没有form或者form没有id,跳过
    
    # 提取标题文本(去除多余空格)
    title_text = title_dt.get_text(strip=True)
    # 提取form的id值
    form_id = form_tag['id']
    
    title_form_dict[title_text] = form_id

# 验证结果,比如打印前5个键值对
for idx, (title, form_id) in enumerate(title_form_dict.items()):
    if idx < 5:
        print(f"标题: {title}\nForm ID: {form_id}\n")
print(f"共提取到{len(title_form_dict)}条有效数据")

关键说明

  • 使用find_next_sibling('dd')精准定位当前标题对应的dd标签,避免选中其他无关的dd元素
  • 增加了空值判断,防止因为页面结构异常(比如某个标题没有对应的dd或form)导致程序报错
  • 用get_text(strip=True)处理标题文本,去除前后空格和换行符,让字典的键更整洁

内容的提问来源于stack exchange,提问作者Keith H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 16:37:34