python - 使用 BeautifulSoup 从具有不同类的多个跨度中提取文本
问题描述
我正在尝试从通过 BeautifulSoup 解析的网页中提取一些数据。
<div class="product-data-list data-points-en_GB">
<div class="float-left in-left col-totalNetAssets" style="height: 36px;">
<span class="caption">
Net Assets of Share Class
<span class="as-of-date">
as of 20-Jul-20
</span>
</span>
<span class="data">
USD 36,636,694,134
</span>
</div>
<div class="float-left in-right col-totalNetAssetsFundLevel">
<span class="caption">
Net Assets of Fund
<span class="as-of-date">
as of 20-Jul-20
</span>
</span>
<span class="data">
USD 37,992,258,237
</span>
</div>
<div class="float-left in-left col-baseCurrencyCode" style="height: 16px;">
<span class="caption">
Fund Base Currency
<span class="as-of-date">
</span>
</span>
<span class="data">
USD
</span>
</div>
我想从“标题”、“截至日期”和“数据”跨度中捕获信息,以创建类似:[(“股份类别的净资产”、“20 年 7 月 20 日”、“36,636,694,134 美元'), ('基金净资产','20-Jul-20','USD 37,992,258,237'), ('基金基础货币','','USD')]
这是我的代码:
data=[]
for tag in soup.findAll("div", {"id": "keyFundFacts"}):
for span in tag.findAll("div", {"class": "product-data-list data-points-en_GB"}):
a = span.find("span", {"class": "caption"}).text
b = span.find("span", {"class": "as-of-date"}).text
c = span.find("span", {"class": "data"}).text
data.append((a,b,c))
但是,当我查看列表“数据”时,我只得到 1 个结果:
<pre>
[('\nNet Assets of Share Class\n\nas of 20-Jul-20\n\n', '\nas of 20-Jul-20\n', '\nUSD 36,636,694,134\n')]
</pre>
除了需要删除新行之外,我知道我缺少一些东西来让脚本通过所有其他跨度,但我已经盯着屏幕这么久了,它并没有变得更清晰。
谁能帮我摆脱痛苦?!
解决方案
我偶然发现了一个似乎可以解决问题的解决方案:
data=[]
for tag in soup.findAll("div", {"id": "keyFundFacts"}):
for element in tag.findAll("div", {"class": "product-data-list data-points-en_GB"}):
for thing in element.findChildren('div'):
a = thing.findNext("span", {"class": "caption"}).text
b = thing.findNext("span", {"class": "as-of-date"}).text
c = thing.findNext("span", {"class": "data"}).text
data.append((a,b,c))
它并不完美,但希望能正常工作。
谢谢大家
推荐阅读
- .net-core - 为什么配置参数设置为调试时构建优化的 dotnet 核心程序集
- angular - 如何动态导入组件并使用 ivy 渲染它们
- ms-word - 如何使用office js设置表头背景颜色
- java - 莫名其妙的数字格式异常事件
- maven - 从 Azure Devops 运行 Selenium(TestNG) 测试
- go - 在 Go 中执行模板后,是否可以使用新的 url 重定向页面?
- javascript - 使用正则表达式 Javascript 匹配 html 标签
- php - 联系表单提交后如何重新渲染应用程序组件?
- asp.net - ASP.NET Core 如何像在 Spring 中一样读取配置属性?
- outlook - 是否可以直接从日历中检测到用户何时更改约会日期?