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
来查找网址。
添加回答
举报