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