python - BeautifulSoup 如何使用 for 循环并提取特定数据?
问题描述
下面的 HTML 代码来自一个关于电影评论的网站。我想从下面的代码中提取星星,即John C. Reilly
,Sarah Silverman
和Gal Gadot
. 我怎么能这样做?
代码:
html_doc = """
<html>
<head>
</head>
<body>
<div class="credit_summary_item">
<h4 class="inline">Stars:</h4>
<a href="/name/nm0000604/?ref_=tt_ov_st_sm">John C. Reilly</a>,
<a href="/name/nm0798971/?ref_=tt_ov_st_sm">Sarah Silverman</a>,
<a href="/name/nm2933757/?ref_=tt_ov_st_sm">Gal Gadot</a>
<span class="ghost">|</span>
<a href="fullcredits/?ref_=tt_ov_st_sm">See full cast & crew</a> »
</div>
</body>
</html>
"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc, 'html.parser')
我的点子
我打算使用 for 循环遍历每个循环,div class
直到找到带有 text 的类Stars
,然后我可以在其中提取名称。但我不知道如何编码,因为我不太熟悉 HTML 语法和模块。
解决方案
我将展示如何实现这一点,并且你只需要学习 BeautifulSoap 语法。
首先,我们想将该方法findAll
用于具有“class”属性的“div”标签。
divs = soup.findAll("div", attrs={"class": "credit_summary_item"})
然后,我们将过滤所有没有星号的 div:
stars = [div for div in divs if "Stars:" in div.h4.text]
如果你只有一个地方有 start 你可以把它拿出来:
star = start[0]
然后再次找到标签“a”中的所有文本
names = [a.text for a in star.findAll("a")]
你可以看到我没有使用任何 html/css 语法,只使用了 soup。我希望它有所帮助。
推荐阅读
- swift - 在 MacOS 上使用 swift 打开并读取 x-callback-url
- sql-server - Use an initial query to merge queries across multiple databases?
- byte-buddy - 使用 Eclipse (EclEmma/JaCoCo) 运行时 ByteBuddy 重置失败 代码覆盖率
- r - R Shiny - uploading multiple csv works locally but not on shinyapps.io
- c++ - Why is my code giving different answers on Online Judge and locally?
- haskell - 如何使用 Data.Serialize 和 ByteString 将包含列表的元组列表保存、附加和读取到文件中
- elixir - 阐明 Phoenix 迁移文件中使用的 Elixir 语法(特别是“创建”函数)
- javascript - 带有 json 解析错误的无服务器框架
- c++ - 如何通过 cms 签名数据中的 openssl apis 获取 OCSP 响应
- python - Python Pandas Cumprod 问题