Skip to main content
 首页 » 编程设计

python之迭代 XML 文件并从中提取数据

2025年05月04日10zfyouxi

我有这个 XML 文件:

<movie id = 0>  
  <Movie_name>The Shawshank Redemption   </Movie_name>  
  <Address>http://www.imdb.com/title/tt0111161/ 
  </Address>  
  <year>1994  </year>  
  <stars>Tim Robbins  Morgan Freeman  Bob Gunton    </stars>  
  <plot> plot... 
  </plot>  
  <keywords>Reviews, Showtimes</keywords> 
</movie> 
 
<movie id = 1>  
  <Movie_name>Inglourious Basterds   </Movie_name>  
  <Address>http://www.imdb.com/title/tt0361748/ 
  </Address>  
  <year>2009  </year>  
  <stars>Brad Pitt  M&#xE9;lanie Laurent  Christoph Waltz    </stars>  
  <plot>plot/...  
  </plot>  
  <keywords>Reviews, credits  </keywords> 
</movie> 

如何迭代文件为每部电影提取其特定数据?我的意思是电影 0:它的名称、地址、年份等等。

输入文件结构是强制性的,因此可以在循环中提取数据。

非常感谢。

请您参考如下方法:

编辑——采用改进的 XML 输入

我强烈建议您按照@Lattyware 的评论尝试验证您的输入。我发现对于无效的 XML 和 HTML,BeautifulSoup 可以很好地恢复可用的内容。以下是它的快速尝试:

from BeautifulSoup import BeautifulSoup 
 
# Note: I have added the <movielist> root element 
xml = """<movielist> 
<movie id = 0>  
  <Movie_name>The Shawshank Redemption   </Movie_name>  
  <Address>http://www.imdb.com/title/tt0111161/ 
  </Address>  
  <year>1994  </year>  
  <stars>Tim Robbins  Morgan Freeman  Bob Gunton    </stars>  
  <plot> plot... 
  </plot>  
  <keywords>Reviews, Showtimes</keywords> 
</movieNum> 
 
<movie id = 1>  
  <Movie_name>Inglourious Basterds   </Movie_name>  
  <Address>http://www.imdb.com/title/tt0361748/ 
  </Address>  
  <year>2009  </year>  
  <stars>Brad Pitt  M&#xE9;lanie Laurent  Christoph Waltz    </stars>  
  <plot>plot/...  
  </plot>  
  <keywords>Reviews, credits  </keywords> 
</movieNum> 
 
</movielist>""" 
 
soup = BeautifulSoup(xml) 
movies = soup.findAll('movie') 
 
for movie in movies: 
    id_tag = movie['id'] 
    name = movie.find("movie_name").text 
    url = movie.find("address").text 
    year = movie.find("year").text 
    stars = movie.find("stars").text 
    plot = movie.find("plot").text 
    keywords = movie.find("keywords").text 
    for item in (id_tag, name, url, year, stars, plot, keywords): 
        print item 
    print '=' * 50 

这将输出以下内容(现在可以访问 ID 标签):

0 
The Shawshank Redemption 
http://www.imdb.com/title/tt0111161/ 
1994 
Tim Robbins  Morgan Freeman  Bob Gunton 
plot... 
Reviews, Showtimes 
================================================== 
1 
Inglourious Basterds 
http://www.imdb.com/title/tt0361748/ 
2009 
Brad Pitt  M&#xE9;lanie Laurent  Christoph Waltz 
plot/... 
Reviews, credits 
================================================== 

希望它能给你一个开始......它只会从这里变得更好。