找到下一个范围并打印文本

时间:2016-05-02 20:18:21

标签: python xpath beautifulsoup

我有这段代码:

   <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;然后移动到下一个跨度并打印该信息?感谢。

3 个答案:

答案 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]代表位置。如果您需要其他跨度数据,请更改该阵列

希望它会对你有所帮助:)。