【发布时间】:2020-11-08 08:18:37
【问题描述】:
如何从以下html中提取元素的所有文本:
from bs4 import BeautifulSoup
html3 = """
<div class="tab-cell l1">
<span class="cyan-90">***</span>
<h2 class="white-80">
<a class="k-link" href="#" title="Jump">Jump</a>
</h2>
<h3 class="black-70">
<span>Red</span>
<span class="black-50">lock</span>
</h3>
<div class="l-block">
<a class="lang-menu" href="#">A</a>
<a class="lang-menu" href="#">B</a>
<a class="lang-menu" href="#">C</a>
</div>
<div class="black-50">
<div class="p-bold">Period</div>
<div class="tab--cell">$</div><div class="white-90">Method</div>
<div class="tab--cell">$</div><div class="tab--cell">Type</div>
</div>
</div>
"""
soup = BeautifulSoup(html3, "lxml")
if soup.find('div', attrs={'class': 'tab-cell l1'}):
div_descendants = soup.div.descendants
for des in div_descendants:
if des.name is not None:
print(des.name)
if des.find(class_='k-link'):
print(des.a.string)
if des.find(class_='black-70'):
print('span')
print(des.span.text)
我只收到第一个链接的文本,之后我什么也得不到。 我想逐行抓取并得到我想要的任何东西,如果有人有任何想法请告诉我。
【问题讨论】:
-
到目前为止,您在这一行
div_descendants = div.descendants上尚未解决对div的引用。 -
我的错,忘记了一行...
-
好吧,
div.descendants仍未解决。移动它不会解决它。你必须先声明它。 -
解决了 div.descendants
-
最初,我试图通过像 des[2]、des[4] 那样在我失败的地方切片 des 来获取文本所以我找到了相反的方法,但是在以同样的方式获得第一个值之后,我以为我也会得到剩余的价值,但那没有发生......
标签: python-3.x web-scraping beautifulsoup python-requests