2 回答

TA貢獻(xiàn)1909條經(jīng)驗(yàn) 獲得超7個(gè)贊
您的解決方案可能有點(diǎn)過于依賴頁面的格式,盡管抓取維基百科總是很困難,因?yàn)閹в袛?shù)據(jù)的元素沒有用標(biāo)識(shí)符或類來標(biāo)記它們保存的數(shù)據(jù),所以您只能依賴于結(jié)構(gòu)無論如何,表格保持不變。
您找到了正確的數(shù)據(jù),但真正使藝術(shù)家鏈接與眾不同的是它們是元素<a>內(nèi)的div-col <div>元素。
BS4 的一個(gè)更簡(jiǎn)單的解決方案(考慮到您既需要藝術(shù)家姓名又需要他們頁面的鏈接):
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"]}')
請(qǐng)注意,這不使用第三方requests,而是標(biāo)準(zhǔn)urllib。
結(jié)果:
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
如果您注重效率(或更確切地說是簡(jiǎn)潔),那么這句話可能就是您喜歡的:
result = [(a.text, a.attrs['href'])
for d in bs.find_all('div', {'class': 'div-col'})
for a in d.find_all('a')]
result將是藝術(shù)家姓名和鏈接的元組列表,即[('Irving Aaronson', '/wiki/Irving_Aaronson'), ('Anders Aarum', '/wiki/Anders_Aarum'), ..]

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