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

如何修复Python代码实现跨多个URL匹配计数而非仅单个URL生效

问题根因

你的计数逻辑写错了:

  1. 每次循环都用列表页的初始计数加当前单个页面的匹配数,没有把之前遍历过的员工页结果累加进去,循环每跑一轮就会覆盖上一轮的计数结果,最后输出的自然只有列表里最后一个URL的统计值。
  2. 初始爬取的员工列表页本身就聚合了所有员工的公开信息,你再单独爬员工页会造成重复统计,手动硬编码URL列表也没法覆盖全部员工,很容易漏数。
修正代码

把计数变量放在循环外做累加,同时自动从列表页提取所有员工详情页链接,不用手动维护URL列表:

import requests
from bs4 import BeautifulSoup

# 初始化院校计数字典
uni_counts = {
    "stockholms uni": 0,
    "lunds uni": 0,
    "uppsalas uni": 0,
    "göteborgs uni": 0,
    "örebros uni": 0,
    "karlstads uni": 0
}

# 抓取员工列表页,提取所有员工详情页链接
list_page = requests.get("https://www.mannheimerswartling.se/medarbetare/")
list_soup = BeautifulSoup(list_page.text, "html.parser")
employee_links = set()

for link in list_soup.find_all("a", href=True):
    path = link["href"]
    # 匹配员工详情页的路径规则,自动补全全链接
    if path.startswith("/medarbetare/") and path != "/medarbetare/":
        employee_links.add(f"https://www.mannheimerswartling.se{path}")

# 遍历所有员工页累加计数
for emp_url in employee_links:
    try:
        resp = requests.get(emp_url, timeout=10)
        emp_soup = BeautifulSoup(resp.content, "html.parser")
        text = emp_soup.body.text.lower()
        for uni in uni_counts:
            uni_counts[uni] += text.count(uni)
    except:
        # 单个页面爬取失败直接跳过,不中断整体统计
        continue

# 打印结果
print(f"Stockholm: {uni_counts['stockholms uni']}")
print(f"Lund: {uni_counts['lunds uni']}")
print(f"Uppsala: {uni_counts['uppsalas uni']}")
print(f"Göteborg: {uni_counts['göteborgs uni']}")
print(f"Örebro: {uni_counts['örebros uni']}")
print(f"Karlstad: {uni_counts['karlstads uni']}")
额外说明
  • 用字典统一管理计数比单独定义多个零散变量更易维护,后续要加新院校只需要在字典里新增对应键值对即可
  • 用集合存储员工链接自动去重,避免同一个页面被重复统计
  • 加了简单的异常捕获和超时设置,不会因为单个页面请求失败导致整个脚本崩溃
  • 去掉了原代码里对列表页的预统计,避免列表页和详情页内容重复导致计数翻倍

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:45:36