我已经查看了stackoverflow,但仍然没有找到解决方案。这是我需要处理的html文件:
......<span ><span class='pl'>Director </span>: <span class='attrs'><a href="/celebrity/1022571/" rel="v:directedBy">James</a></span></span><br/>
<span ><span class='pl'>Actor</span>: <span class='attrs'><a href="/celebrity/1022571/">Tom</a></span></span><br/>
<span class="pl">Countries:</span> USA <br/>
<span class="pl">Language:</span> English <br/>......
文件中有很多span
标签。这是我的代码:
from bs4 import BeautifulSoup
record=[]
soup=BeautifulSoup(html)
spans=soup.find_all('span')
for span in spans:
record.append(span.text)
我使用上面提到的代码,但遇到2个问题。第一个是我加倍Director
,Actor
结果是因为它们在2个span
标记中。第二个问题是我无法在<br>
标签之前获取文本。我不想使用以下代码:
soup.find("span", text="Language:").next_sibling
因为对于每个br
标签,我都需要将该代码添加到我的项目中,这很烦人。您有一些优雅的解决方案吗?
如果要编写通用的内容,则仍然需要使用next_sibling
或查找下一个同级标记/文本节点find_next_sibling
。
这是处理两种情况的代码-当标签和文本节点后面有一个元素时:
soup = BeautifulSoup(html, "html.parser")
for label in soup.find_all("span", class_="pl"):
value = label.find_next_sibling("span", class_="attrs")
value = label.next_sibling.strip() if not value else value.get_text(strip=True)
label = label.get_text(strip=True).strip(":")
print(label, value)
印刷:
Director James
Actor Tom
Countries USA
Language English
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句