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

BeautifulSoup爬取仅返回单个父节点链接问题求助

解决BeautifulSoup仅爬取到部分议员链接的问题

问题原因

你使用的sc-907102a3-0 sc-e6d2fd61-0 gOAsvA jBTDjv是前端框架动态生成的类名,这类名称不具备稳定性,且不同字母分组的议员链接可能使用了不同的动态类名,导致findAll只匹配到第一个分组(A开头)的链接。

解决方案

方案一:基于链接href特征匹配

所有议员链接的href均以/sv/ledamoter-och-partier/ledamoterna/开头,用正则匹配该特征即可覆盖所有目标链接:

import requests
from bs4 import BeautifulSoup
import re

url = "https://www.riksdagen.se/sv/ledamoter-och-partier/ledamoterna/"
response = requests.get(url)
content = BeautifulSoup(response.content, "html.parser")
mp_pages = []

# 匹配符合格式的议员链接
mps = content.findAll('a', href=re.compile(r'^/sv/ledamoter-och-partier/ledamoterna/[^/]+/$'))
for x in mps:
    mp_pages.append(x.get('href'))

print(mp_pages)

方案二:使用稳定的父容器遍历

先定位所有议员分组的父容器(避免依赖动态类),再在每个分组内提取链接:

import requests
from bs4 import BeautifulSoup
import re

url = "https://www.riksdagen.se/sv/ledamoter-och-partier/ledamoterna/"
response = requests.get(url)
content = BeautifulSoup(response.content, "html.parser")
mp_pages = []

# 定位所有字母分组的容器(可根据页面源码调整选择器)
group_containers = content.findAll('div', class_=re.compile(r'sc-[a-f0-9]+-0 sc-[a-f0-9]+-2'))
for container in group_containers:
    # 在分组内提取所有有效议员链接
    links = container.findAll('a', href=True)
    for link in links:
        if link['href'].startswith('/sv/ledamoter-och-partier/ledamoterna/'):
            mp_pages.append(link['href'])

print(mp_pages)

注意事项

  • 动态生成的类名(sc-前缀)会随前端版本变更失效,爬取时优先使用语义化属性、链接特征或稳定的页面结构定位元素。
  • 可通过浏览器开发者工具查看其他分组内链接的属性,验证选择器是否覆盖所有目标元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:22:35