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

BeautifulSoup爬取分页数据时name、surname字段重复问题修复

错误原因

你的代码存在两个核心逻辑问题导致姓名字段重复:

  • 存储单条记录的字典wev定义在了所有循环的最外层,整个爬取过程全程复用同一个字典对象,每次给字典赋值都会覆盖上一条记录的内容,最终追加到列表temp中的所有元素都是同一个字典的引用,所有条目都会显示最后一次写入的姓名
  • 表格遍历逻辑错误:目标页面的成员表格只有1个<tbody>标签,内部的每一行<tr>才对应单个成员的姓名、姓氏字段,你当前直接遍历tbody,只会拿到表格最后一行的姓名值,没有和后续提取的地址、邮箱等详情块做一一对应
    另外代码中字典键名前后带多余空格,会导致最终生成的DataFrame出现冗余列名。
修正后代码
import requests
import pandas as pd
from bs4 import BeautifulSoup

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36"
}

temp = []
for page in range(1, 5):
    r = requests.get(
        f"https://www.aeafa.es/asociados.php?provinput=&_pagi_pg={page}",
        headers=headers,
    )
    soup = BeautifulSoup(r.content, "lxml")
    # 提取当前页所有成员的姓名、姓氏
    details_table = soup.find('table', class_="table")
    name_list = []
    for tr in details_table.find('tbody').find_all('tr'):
        td_content = [td.text.strip() for td in tr.find_all("td")]
        name_list.append( (td_content[0], td_content[1]) )
    
    # 提取当前页所有成员的详情信息
    detail_blocks = soup.find_all("div", class_="col-md-8 col-sm-8")
    # 按索引匹配姓名和对应详情
    for idx, block in enumerate(detail_blocks):
        # 每条记录新建独立字典,避免值覆盖
        wev = {}
        p_content = [p.text.strip() for p in block.find_all("p")]
        # 匹配对应姓名
        wev['Nombre'] = name_list[idx][0]
        wev["Apellidos"] = name_list[idx][1]
        # 提取各字段,统一去除多余空白
        wev["Dirección"] = p_content[2][12:].strip()
        wev["Población"] = p_content[3][14:].strip()
        wev["Provincia"] = p_content[4][14:].strip()
        wev["Teléfono"] = "+" + p_content[5][11:].replace(".", "").replace("-", "").strip()
        wev["Email"] = p_content[6][10:].strip()
        
        temp.append(wev)

df = pd.DataFrame(temp)
print(df)
# 如需导出csv可放开下面注释
# df.to_csv("aeafa_members.csv", index=False, encoding="utf-8-sig")
修正说明
  • 单条记录的字典初始化移入详情遍历循环内部,每条记录独立存储,彻底解决值覆盖问题
  • 先提取当前页所有姓名组成列表,再通过索引和详情块一一匹配,避免姓名错位、重复
  • 统一清理所有字段前后的多余空白,移除字典键名的多余空格,最终输出的DataFrame结构规整
  • 修正了请求URL中多余的HTML转义符,避免请求参数异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:27:14