2 回答

TA貢獻1909條經驗 獲得超7個贊
您的解決方案可能有點過于依賴頁面的格式,盡管抓取維基百科總是很困難,因為帶有數據的元素沒有用標識符或類來標記它們保存的數據,所以您只能依賴于結構無論如何,表格保持不變。
您找到了正確的數據,但真正使藝術家鏈接與眾不同的是它們是元素<a>內的div-col <div>元素。
BS4 的一個更簡單的解決方案(考慮到您既需要藝術家姓名又需要他們頁面的鏈接):
from urllib import request
from bs4 import BeautifulSoup
with request.urlopen("https://en.wikipedia.org/wiki/List_of_jazz_pianists") as response:
bs = BeautifulSoup(response, "html.parser")
for div_col in bs.find_all('div', {'class': 'div-col'}):
for artist_tag in div_col.find_all('a'):
print(f'{artist_tag.text}, {artist_tag.attrs["href"]}')
請注意,這不使用第三方requests,而是標準urllib。
結果:
Irving Aaronson, /wiki/Irving_Aaronson
Anders Aarum, /wiki/Anders_Aarum
...
Bojan Zulfikarpa?i?, /wiki/Bojan_Zulfikarpa%C5%A1i%C4%87
Axel Zwingenberger, /wiki/Axel_Zwingenberger
如果您注重效率(或更確切地說是簡潔),那么這句話可能就是您喜歡的:
result = [(a.text, a.attrs['href'])
for d in bs.find_all('div', {'class': 'div-col'})
for a in d.find_all('a')]
result將是藝術家姓名和鏈接的元組列表,即[('Irving Aaronson', '/wiki/Irving_Aaronson'), ('Anders Aarum', '/wiki/Anders_Aarum'), ..]

TA貢獻1829條經驗 獲得超7個贊
找到后bigList
,您可以使用此行替換其余行:
[row['title'] for row in bigList[5].find_all('a')]
要理解此代碼,請查看bigList[5]
bigList[5].find_all('a')` 的輸出,然后也嘗試該行。
您可以類似地使用href
代替title
來查找網址。
添加回答
舉報