我有这段代码:
<div class="result">
<span class="number">number</span>
<div class="results-metadata">
<span class="detail"><span class="unique name 1"></span> data 1</span>
<span class="detail"><span class="unique name 2"></span> data 2</span>
<br/>
<span class="detail"><span class="unique name 3"></span> data 3</span>
<br/>
<span class="detail"><span class="unique name 4"></span> data 4</span>
<br/>
</div>
<span class="label label-default"></span>
</div>
所以我想在span class =&#34; detail&#34;中打印信息。我可以通过执行soup.findAll('span', attrs={"class":"detail"})
然后使用for循环进行迭代来打印它们。我的问题是我正在用xlsxwriter将这些信息写入excel表。我希望数字与数据1,2,3和4相关联。我想这样做的方法是找到span&#34;唯一名称1&#34;然后打印下一个跨度数据(在本例中为数据1)。我相信我可以用xpath做到这一点,但还没弄明白怎么做。
有人可以帮助我在课堂上打印信息&#34;详细信息&#34;通过找到类&#34;唯一名称1&#34;然后移动到下一个跨度并打印该信息?感谢。
答案 0 :(得分:2)
我想要这样做的方法是找到span&#34;唯一名称1&#34;然后打印下一个跨度数据(在本例中为数据1)。
但&#34;数据1&#34;不是下一个跨越文本,但父级跨越文本
你可以尝试这个xpath:
//span[span/@class='unique name 1']/text()
答案 1 :(得分:2)
当然,在BeautifulSoup
的条款中,这被称为next sibling:
soup.find("span", class_="unique name 1").next_sibling.strip()
演示:
>>> from bs4 import BeautifulSoup
>>> data = """
... <div class="result">
... <span class="number">number</span>
... <div class="results-metadata">
... <span class="detail"><span class="unique name 1"></span> data 1</span>
... <span class="detail"><span class="unique name 2"></span> data 2</span>
... <br/>
... <span class="detail"><span class="unique name 3"></span> data 3</span>
... <br/>
... <span class="detail"><span class="unique name 4"></span> data 4</span>
... <br/>
... </div>
... <span class="label label-default"></span>
... </div>
... """
>>> soup = BeautifulSoup(data, "html.parser")
>>> soup.find("span", class_="unique name 1").next_sibling.strip()
u'data 1'
答案 2 :(得分:0)
您可以使用Xpath,如下所示: -
//span[@class='detail'][2]/text()
上面的数组[2]代表位置。如果您需要其他跨度数据,请更改该阵列
希望它会对你有所帮助:)。