如何从<span>中获取文本

2024-10-03 23:27:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力搜刮一个网站。一切正常,但我想找到<span>之间的文本。我能找回第一个,但我不能找到下一个。 以下是html摘录:

<ul class="product-small-specs" data-test="product-specs">
    <li>
    <span>Engels</span>
    </li>
    <li>
    <span>Hardcover</span>
    </li>
    <li>
    <span>9780141395838</span>
    </li>
    <li>
    <span>Druk: New ed</span>
    </li>
    <li>
    <span>oktober 2014</span>
    </li>
    <li>
    <span>352 pagina's</span>
    </li>
    </ul>

当我尝试这个:

xxx.span.text

我得到'Engels'(这是可以的)。你知道吗

但是如何在下一个跨度之间得到文本呢?你知道吗

xxx.span.next_sibling

给出'/n'

任何帮助都将不胜感激。你知道吗

编辑: url是this

rec_all = soup.find_all("ul", class_="product-small-specs") rec = soup.find("ul", class_="product-small-specs") for iets in rec_all: for a in iets: print(a.span.text) print(a.span.next_sibling)

Tags: text文本liallproductulclassxxx
1条回答
网友
1楼 · 发布于 2024-10-03 23:27:15

您可以使用find_all("span")获取包含所有<span>的列表,然后使用for-loop从列表中的每个项目获取文本

from bs4 import BeautifulSoup as BS

text = '''<ul class="product-small-specs" data-test="product-specs">
    <li>
    <span>Engels</span>
    </li>
    <li>
    <span>Hardcover</span>
    </li>
    <li>
    <span>9780141395838</span>
    </li>
    <li>
    <span>Druk: New ed</span>
    </li>
    <li>
    <span>oktober 2014</span>
    </li>
    <li>
    <span>352 pagina's</span>
    </li>
</ul>'''


soup = BS(text, 'html.parser')

all_items = soup.find_all('span')

for item in all_items:
    print(item.text)

结果:

Engels
Hardcover
9780141395838
Druk: New ed
oktober 2014
352 pagina's

编辑:如果需要所选<span>中的所有<ul>,则可以使用

ul = soup.find('ul', class_="product-small-specs")

all_items = ul.find_all('span') # search only inside `ul`

for item in all_items:
    print(item.text)

相关问题 更多 >