Beautifulsoup-如何从<span>的

时间:2019-11-16 18:46:50

标签: python beautifulsoup

我正在尝试抓取一个网站。一切正常,但是我想在<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'

任何帮助将不胜感激。

编辑: 网址为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)

1 个答案:

答案 0 :(得分:1)

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

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)