【发布时间】:2020-07-22 22:16:44
【问题描述】:
我正在尝试从通过 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>
我想从“caption”、“as-of-date”和“data”跨度中捕获信息,以创建如下内容: [('股份类别的净资产','20-Jul-20','USD 36,636,694,134'), ('基金净资产','20-Jul-20','USD 37,992,258,237'), ('基金基础货币','','美元')]
这是我的代码:
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>
除了需要删除新行之外,我知道我缺少一些东西来让脚本通过所有其他跨度,但我已经盯着屏幕这么久了,它并没有变得更清晰。
谁能帮我摆脱痛苦?!
【问题讨论】:
-
因为您使用的是 span.find 而不是 span.findAll 它只返回包含您定义的类的第一个元素。
标签: python web-scraping beautifulsoup