如何用BeautifulSoup抓取维基百科多表格的迪士尼电影及上映日期?
解决方案
修改后的代码
import requests from bs4 import BeautifulSoup url = "https://en.wikipedia.org/wiki/List_of_Walt_Disney_Pictures_films" res = requests.get(url).text soup = BeautifulSoup(res, 'lxml') # 遍历页面中所有class为wikitable的电影表格 for table in soup.find_all('table', class_='wikitable'): # 跳过表头行,遍历表格内的每一行数据 for row in table.find_all('tr')[1:]: columns = row.find_all(['th', 'td']) # 跳过列数不足的无效行(比如合并单元格的行) if len(columns) < 2: continue try: # 提取电影名称:优先取<i><a>标签文本,兼容无<a>标签的情况 movie_tag = columns[0].find('i') if movie_tag and movie_tag.find('a'): movie_name = movie_tag.a.text.strip() else: movie_name = columns[0].get_text(strip=True) # 提取上映日期:取第二列文本并清理格式 release_date = columns[1].get_text(strip=True) # 按照要求的格式对齐输出 print(f'"{movie_name}"{" "*(40 - len(movie_name))}"{release_date}"') except Exception: # 跳过处理失败的行,避免程序中断 continue
修改说明
- 覆盖所有表格:把原代码中只找单个表格的
soup.find()改成soup.find_all(),这样能遍历页面所有年代分段的电影表格。 - 过滤无效行:增加列数检查,跳过合并单元格或内容缺失的行,避免索引错误。
- 兼容特殊条目:有些电影没有
<a>标签,补充了直接提取单元格文本的逻辑,避免遗漏数据。 - 格式对齐处理:通过字符串左对齐调整,让电影名和上映日期的输出保持整齐的两列格式。
内容的提问来源于stack exchange,提问作者ariyasas94
相关产品推荐
相关产品推荐

