【问题标题】:Wanting to Scrape all "li" elements. Python想要刮掉所有的“li”元素。 Python
【发布时间】:2021-10-16 15:11:55
【问题描述】:

在 Python 方面,我只是一个真正的新手,但我真的很享受学习过程。我对数据分析很感兴趣,我想做的只是抓取维基百科页面的列表元素。

我已经设法通过以下方式提取列表并美化它:

music_box = soup.find(class_="div-col")
music_rows = music_box.find_all("li")
for row in music_rows:
    print(row.prettify())

然后为我提供:

    <li>
 Natalie Beridze – When Dreams Become Responsibility
</li>

<li>
 <a href="/wiki/The_Specials" title="The Specials">
  The Specials
 </a>
 – Do Nothing
</li>

<li>
 <a href="/wiki/Nine_Inch_Nails" title="Nine Inch Nails">
  Nine Inch Nails
 </a>
 – Your Touch
</li>

<li>
 <a href="/wiki/Phosphorescent_(band)" title="Phosphorescent (band)">
  Phosphorescent
 </a>
 – Song for Zula

本质上,我想创建一个只提取艺术家和歌曲的函数。理想情况下弹出到列表或字典中。

我觉得我搞混了,因为我认为这会奏效

music_info = {}
for index, row in enumerate(music_rows):
    if index == 0:
        music_info['artist'] = row.find("li").get_text("", strip=True)
    (music_info)

我真的是 python 新手,一直在尝试自学,也许我还没有完全掌握基础知识,如果这是你们认为我应该在问你们之前知道的事情,请说,这个社区今年加入对我来说太好了,所以无论是否有建设性的建议都值得赞赏,谢谢大家!希望大家五一快乐

【问题讨论】:

标签: python html python-3.x list beautifulsoup


【解决方案1】:

您无需再次使用row.find("li") 来选择&lt;li&gt;,因为您已经在music_rows = music_box.find_all("li") 中选择了它们。 row.find("li") 会在 row 的孩子中找到 &lt;li&gt;,而不是在其自身中。你可以试试这个:

for index, row in enumerate(music_rows):
    music_info = {}
    music_info["artist"], music_info["name"] = map(str.strip, row.get_text("", strip=True).split("–"))
    print(music_info)

【讨论】:

  • 你太棒了!非常感谢,显然对 row.find 太热衷了,至少我有一些方面是对的,哈哈。非常感谢您的帮助,希望您度过愉快的一天!
猜你喜欢
  • 1970-01-01
  • 2021-03-11
  • 1970-01-01
  • 2021-09-26
  • 1970-01-01
  • 1970-01-01
  • 2021-03-17
  • 2022-01-14
  • 1970-01-01
相关资源
最近更新 更多