Python:lxml-xpath在开始时提供不需要的数据

Python:lxml-xpath在开始时提供不需要的数据,python,xpath,Python,Xpath,我想让这个角色从 海峡时报指数(STI)(STI.SI)结束。名单很长 <option value="nyse_mkt" class="{access_allowed : true}">NYSE Mkts</option> <option value="world" class="{access_allowed : true}">World</option></select><select class="validate-sele

我想让这个角色从
海峡时报指数(STI)(STI.SI)
结束。名单很长

<option value="nyse_mkt" class="{access_allowed : true}">NYSE Mkts</option>
<option value="world" class="{access_allowed : true}">World</option></select><select class="validate-selection" id="counter_sgx" name="counter"><option value="">-- Select Counter --</option>
<option value="STI.SI">Straits Times Index (STI) (STI.SI)</option>
<option value="ADLN.SI">ADLN (ADLN.SI)</option>
<option value="SGXCN2.SI">CN ACCESS INDEX (TR) (SGXCN2.SI)</option>
<option value="SGXCN7.SI">CN ACCESS STB (10%) INDEX (SGXCN7.SI)</option>
<option value="SGXCN6.SI">CN ACCESS STB (5%) INDEX (SGXCN6.SI)</option>
<option value="SGXCN15.SI">FNGUIDE CN ACC (1X) TR IDX (SGXCN15.SI)</option>
<option value="SGXCN13.SI">FNGUIDE CN ACC INV 1X TR KRW IDX (SGXCN13.SI)</option>
<option value="SGXCN14.SI">FNGUIDE CN ACC LEV 2X TR IDX (SGXCN14.SI)</option>
<option value="FSTAS.SI">FTSE ST All-Share Index (FSTAS.SI)</option>
我的代码是:

from lxml import html
import requests

page = requests.get('http://www.shareinvestor.com/fundamental/factsheet.html?counter=STI.SI')
tree = html.fromstring(page.content)
tree.xpath('//option[@value]/text()')
我需要的示例输出是

Straits Times Index (STI) (STI.SI)
ADLN (ADLN.SI)
CN ACCESS INDEX (TR) (SGXCN2.SI)
...
FTSE ST All-Share Index (FSTAS.SI)

您希望构建一个执行以下操作的XPath:

  • 查找具有给定值的元素(
    STI.SI
  • 给我所有它的
    选项
    兄弟姐妹的文本
  • 对于第一部分,在您的代码中,您只能获得具有值的选项(几乎所有选项),您必须将其修改为:
    option[@value=“STI.SI”]

    对于第二部分,您必须遵循所有选项同级:
    following sibling::option

    总括起来:

    tree.xpath('//option[@value="STI.SI"]/following-sibling::option/text()')
    
    将为您指定的兄弟姐妹之后的所有兄弟姐妹。但是,既然您也希望包含这些内容,那么您应该这样做:

    tree.xpath('//option[@value=""]/following-sibling::option/text()')
    

    因为值为
    STI.SI
    的选项前面的选项的值为空。注意这一点,因为我还没有测试在
    select

    中使用多个空值时会发生什么情况,您的XPath具有关闭参数而没有相应的打开参数:
    @class=“validate selection”)
    @har07,它现在返回空值。让我编辑一下
    tree.xpath('//option[@value=""]/following-sibling::option/text()')