Beautifulsoup-基于上一个div子标签从下一个div子标签中提取文本

时间:2018-09-21 15:24:01

标签: python python-3.x python-2.7 beautifulsoup python-beautifultable

我正在尝试根据以前的div跨度文本提取div的下一个跨度中的数据。下面是html内容,

<div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:37px; top:161px; width:38px; height:13px;"><span style="font-family: b'Times-Bold'; font-size:13px">Name
<br></span></div><div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:85px; top:161px; width:58px; height:13px;"><span style="font-family: b'Helvetica'; font-size:13px">Ven
    <br></span></div>

我尝试使用来查找文本,

n_field = soup.find('span', text="Name\")

然后尝试使用下一个兄弟姐妹获取文本,

n_field.next_sibling()

但是,由于该字段中的“ \ n”,我无法找到跨度并无法提取next_sibling文本。

简而言之,我正在尝试以以下格式构成字典,

{"Name": "Ven"}

对此有任何帮助或想法。

2 个答案:

答案 0 :(得分:0)

我会这样写以获取那些元素:

soup.find('span', attrs={'style': "font-family: b'Helvetica'; font-size:13px"}).text

{{1}}

答案 1 :(得分:0)

我可以解决这个问题,由于某些原因,即使删除了\ n,我也无法获取nextSibling(),所以尝试了如下所示的另一种策略:

from bs4 import BeautifulSoup

"""Lets get rid of the \n""" 
html = """<div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:37px; top:161px; width:38px; height:13px;"><span style="font-family: b'Times-Bold'; font-size:13px">Name<br></span></div><div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:85px; top:161px; width:58px; height:13px;"><span style="font-family: b'Helvetica'; font-size:13px">Ven<br></span></div>""".replace("\n","")
soup = BeautifulSoup(html)
span_list = soup.findAll("span")
result = {span_list[0].text:span_list[1].text.replace(" ","")}

结果为:

{'Name':'Ven'}