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

使用BeautifulSoup爬取多模板多URL时出现Series真值歧义报错

错误原因

报错核心是你直接用if page_url_df['template'] == 1做分支判断:

  • page_url_df['template']是pandas Series对象,和1做相等比较后返回的是一组布尔值组成的Series,不是单个True/False
  • Python的if语句只能接收单个布尔值作为判断条件,无法直接判定一整组布尔值的真假,因此抛出The truth value of a Series is ambiguous的错误
  • 原逻辑还存在设计缺陷:分支判断写在循环外层,会导致要么所有URL都走模板1解析规则,要么全走模板2规则,根本无法实现两种模板混合匹配的需求
修复方案

逐行遍历DataFrame,读取每一行对应的URL和模板编号,针对单个URL的模板类型选择对应解析逻辑即可,修复后的完整代码如下:

import requests
from bs4 import BeautifulSoup
import pandas as pd

page_url1 = 'https://www.vet.upenn.edu/research/centers-laboratories/research-laboratory/research-laboratory/anguera-laboratory'
page_url2 = 'https://www.med.upenn.edu/apps/faculty/index.php/g20001100/p8866286'
page_url_lst = {'url': [page_url1, page_url2], 'template': [1,2]}
page_url_df = pd.DataFrame(page_url_lst)

data = []
# 逐行遍历数据集,匹配每条URL对应的模板类型
for _, row in page_url_df.iterrows():
    current_url = row['url']
    current_template = row['template']
    if current_template == 1:
        # 模板1解析逻辑
        r = requests.get(current_url, timeout=10)
        soup = BeautifulSoup(r.text, 'lxml')
        for e in soup.select('#tabs-publications em'):
            data.append({
                'author':e.previous.get_text(strip=True)[:-1],
                'title':e.get_text(strip=True),
                'journal':e.next_sibling.get_text(strip=True),
                'source': current_url
            })
    else:
        # 模板2解析逻辑
        r = requests.get(current_url, timeout=10)
        soup = BeautifulSoup(r.text, 'lxml')
        for a in soup.find_all('span',{'class':'fac_citation'}):
            data.append({
                'author':a.find('b').get_text(),
                'title':a.find('i').get_text(strip=True),
                'journal':a.find('i').next_sibling.get_text(strip=True),
                'source': current_url
            })

# 如需校验结果可转成DataFrame输出
# result_df = pd.DataFrame(data)
# print(result_df)
关键修改点
  • 移除了对整个Series的直接布尔判断,改用iterrows()逐行读取单条记录的模板编号,单值判断不会出现真值歧义
  • 将两套解析逻辑移入逐行循环内部,每处理一个URL就匹配对应模板的解析规则,支持两种模板的URL混合爬取
  • 给requests请求增加了timeout参数,避免请求无响应时程序无限挂起

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 10:48:19