我正在尝试使用 Python 中的 BeautifulSoup 抓取网站。所有数据都被摄取,包括我试图访问的所有链接。但是,当我使用 .findAll() 函数时,它仅返回我正在查找的链接的一部分。也就是说只返回后面xpath中的链接
/html/body/div[1]/div/div[2]/div/div[2]/div[1]
这会忽略中的链接 /html/body/div[1]/div/div[2]/div/div[2]/div[2] /html/body/div[1]/div/div[2]/div/div[2]/div[3] 等等
import requests
from bs4 import BeautifulSoup
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(attrs = {'class': 'sc-907102a3-0 sc-e6d2fd61-0 gOAsvA jBTDjv'})
for x in mps:
mp_pages.append(x.get('href'))
print(mp_pages)
我希望所有链接都附加到 mp_pages 列表中,但它只进入一个父级(以 A 开头的链接),似乎停在最后一个子级,而不是继续。
我见过类似的问题,其中答案是由于javascript而使用selenium,但由于所有链接都在内容中,所以这是没有意义的。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
您在页面上看到的数据以 Json 形式存储在
元素中。要解析它,您可以使用下一个示例:import json import requests import pandas as pd from bs4 import BeautifulSoup url = 'https://www.riksdagen.se/sv/ledamoter-och-partier/ledamoterna/' soup = BeautifulSoup(requests.get(url).content, 'html.parser') data = json.loads(soup.select_one('#__NEXT_DATA__').text) # print(json.dumps(data, indent=4)) all_data = [] for c in data['props']['pageProps']['contentApiData']['commissioners']: all_data.append((f'{c["callingName"]} {c["surname"]}', c['url'])) df = pd.DataFrame(all_data, columns=['Name', 'URL']) print(df)打印: