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

使用BeautifulSoup从维基百科链接爬取人物去世日期的实现方法

维基百科人物去世日期爬取代码调整方案

核心调整逻辑

  • 新增反爬配置:添加浏览器UA请求头,避免维基百科拦截批量爬取请求
  • 新增在世人物快速判定规则:页面存在ForceAgeToShow类元素时,直接判定为在世人物,去世日期字段留空
  • 新增日期过滤逻辑:通过正则匹配YYYY-MM-DD格式日期,排除出生日期后剩余的有效日期即为去世日期
  • 新增异常处理逻辑:添加请求超时、状态码校验、异常捕获机制,避免批量爬取时程序意外中断

修改后完整代码

from bs4 import BeautifulSoup
import requests
import pandas as pd
import re

# 配置请求头模拟浏览器,避免被反爬拦截
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
# 日期匹配正则:匹配YYYY-MM-DD格式的日期
date_pattern = re.compile(r'\d{4}-\d{2}-\d{2}')

df = pd.read_csv('wiki_links.csv')
# 初始化去世日期列,默认值为空
df['death_date'] = ''

for index, row in df.iterrows():
    try:
        req = requests.get(row['url'], headers=headers, timeout=10)
        # 请求失败直接跳过,字段留空
        if req.status_code != 200:
            continue
        soup = BeautifulSoup(req.content, features='lxml')
        
        # 存在ForceAgeToShow类说明是在世人物,直接跳过
        if soup.select_one('.ForceAgeToShow'):
            continue
        
        # 提取出生日期用于后续排除
        birth_elem = soup.select_one('.bday')
        birth_date = birth_elem.text.strip() if birth_elem else ''
        
        # 遍历所有日期span找去世日期
        date_spans = soup.select('table.infobox td.infobox-data span')
        for span in date_spans:
            span_text = span.text.strip()
            date_match = date_pattern.search(span_text)
            if date_match:
                found_date = date_match.group()
                # 排除出生日期后剩余的有效日期即为去世日期
                if found_date != birth_date:
                    df.at[index, 'death_date'] = found_date
                    break
    except:
        # 任何异常都跳过,对应字段留空
        continue

# 保存结果到CSV
df.to_csv('Scraped/wiki_links.csv', index=0)

适配说明

针对你提供的两类页面示例,代码逻辑完全匹配:

  1. 刘易斯·汉密尔顿(在世)页面存在.ForceAgeToShow元素,直接跳过,去世日期留空
  2. 詹姆斯·亨特(已去世)页面无.ForceAgeToShow元素,提取到和出生日期不同的1993-06-15,自动写入对应字段

内容的提问来源于stack exchange,提问作者Karan Bhandari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 02:36:04