我正在嘗試使用 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,但由於所有連結都在內容中,所以這是沒有意義的。
P粉5534287802023-09-15 11:25:57
您在頁面上看到的資料以 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)
列印:
Name URL 0 Fredrik Ahlstedt https://www.riksdagen.se/sv/ledamoter-och-partier/ledamot/fredrik-ahlstedt_8403346f-0f0c-4d48-bbd0-f6b43b368873/ 1 Emma Ahlström Köster https://www.riksdagen.se/sv/ledamoter-och-partier/ledamot/emma-ahlstrom-koster_e09d9076-28c7-4583-a17f-7a776de7f01f/ 2 Alireza Akhondi https://www.riksdagen.se/sv/ledamoter-och-partier/ledamot/alireza-akhondi_4099ff9c-5d27-4605-b018-98fb229d94fa/ 3 Anders Alftberg https://www.riksdagen.se/sv/ledamoter-och-partier/ledamot/anders-alftberg_f0d945f3-9449-458e-ba40-1a0da1a72303/ 4 Leila Ali Elmi https://www.riksdagen.se/sv/ledamoter-och-partier/ledamot/leila-ali-elmi_5997ba96-4f01-46f4-8bd8-e1411a9d503b/ 5 Janine Alm Ericson https://www.riksdagen.se/sv/ledamoter-och-partier/ledamot/janine-alm-ericson_7e408079-a5cd-432a-a30e-fd61fd15c65a/ 6 Ann-Sofie Alm https://www.riksdagen.se/sv/ledamoter-och-partier/ledamot/ann-sofie-alm_f91f6a86-591c-449c-b3dd-1fdaa86338cd/ 7 Sofia Amloh https://www.riksdagen.se/sv/ledamoter-och-partier/ledamot/sofia-amloh_359e75f3-519e-49d7-b155-ada488e621ea/ 8 Andrea Andersson Tay https://www.riksdagen.se/sv/ledamoter-och-partier/ledamot/andrea-andersson-tay_352b875d-e44d-43f5-bf93-e507770c12de/ ...and so on.