首页 > 解决方案 > 如何从 html 源代码中具有相同属性集和相同层次结构的 2 个元素中抓取单个元素(使用 python 的美丽汤)

问题描述

这是IMDB网站的源代码

我想删除图像中以蓝色突出显示的元素。该元素代表特定电影的“票数”。当我尝试删除它时,我也会在图像中得到代表“收藏”的底部元素” 因为这两个元素具有相同的属性和相同的层次结构。有没有办法只提取突出显示的元素?

标签: pythonweb-scrapingbeautifulsoupscrapy

解决方案


一种方法可能是遍历所有的兄弟姐妹,<p class="sort-num_votes-visible">如果你发现一个被 a和 a<span name="nv">包围的那,那么这一定是你正在寻找的跨度。这当然意味着这个 HTML 片段的结构总是相同的。如果其中一个s 可能丢失,那么这种方法显然会失败。<span class="text-muted"><span class="ghost">span

如果保证这两个跨度始终存在并且按照确切的顺序,您可以执行以下操作(您的增补 HTML 在 中html_soup):

votes = html_soup.find("p", {"class": "sort-num_votes-visible").find_all("span", {"name": "nv"})[0]

编辑:

根据您的评论,您可以执行以下操作来解析多部电影的投票:

for p in html_soup.find("p", {"class": "sort-num_votes-visible"}):
    votes = p.find_all("span", {"name": "nv"})[0]

    < Put whatever code here for each of your movies
      ...
    >

推荐阅读