批量抓取标签:如何修正代码获取IMDB Top250全部电影链接?
解决IMDB Top250全影片链接抓取问题
嘿,我一眼就看出问题所在啦——你的代码只拿到第一个影片链接,是因为你用了find()而不是find_all()来定位影片所在的单元格!
问题根源
bs.find('td',{'class':'titleColumn'})只会返回页面中第一个匹配到的td.titleColumn元素,所以你的循环只处理了第一个影片的行,自然只能拿到一条链接。要获取全部250部电影的对应元素,得用find_all()来抓取所有符合条件的单元格。
修改后的完整代码
from urllib.request import urlopen from bs4 import BeautifulSoup html = urlopen('https://www.imdb.com/chart/top/') bs = BeautifulSoup(html,'html.parser') links = [] # 用find_all获取所有包含影片标题的td元素 for title_td in bs.find_all('td', {'class': 'titleColumn'}): # 从每个td里提取对应的a标签链接 movie_link = title_td.find('a')['href'] links.append(movie_link) # 现在links里就是全部250部电影的链接啦 print(links)
额外提示
- 这段代码会遍历每一个影片对应的标题单元格,从中提取出影片详情页的相对链接。如果需要完整的URL,可以在拼接时加上IMDB的域名(比如
f"https://www.imdb.com{movie_link}")。 - 注意IMDB的页面结构可能会随时间调整,如果后续抓取失效,可以检查页面元素的类名或结构是否发生变化。
内容的提问来源于stack exchange,提问作者Marco Nashaat




