Python 3.x xpath连接来自多个python元素的文本

Python 3.x xpath连接来自多个python元素的文本,python-3.x,xpath,Python 3.x,Xpath,您好,我有一些来自此网站的html文件: 但它只返回a/text()。 你能帮我做这件事吗? 感谢您尝试在没有范围的情况下搜索span/text()。在这部分查询的开头添加/,在下面的列表中: ('//td[@class="name table-participant"]/a/text() | //span/text()').extract() 但我强烈建议使用以下决定: ('//td[@class="name table-participant"]//*[self::a/ancestor:

您好,我有一些来自此网站的html文件:

但它只返回a/text()。 你能帮我做这件事吗?
感谢您尝试在没有范围的情况下搜索
span/text()
。在这部分查询的开头添加
/
,在下面的列表中:

('//td[@class="name table-participant"]/a/text() | //span/text()').extract()
但我强烈建议使用以下决定:

 ('//td[@class="name table-participant"]//*[self::a/ancestor::td or self::span]/text()').extract

对于仅从您选择的
td
-scope获取span,我假设您正在使用Scrapy来刮取HTML

从示例HTML的结构来看,您似乎希望获得锚元素的文本,因此需要迭代这些文本

只有这样,才能剥离并连接锚元素的文本子节点,以获得格式正确的字符串。引号的不一致使用会带来额外的复杂性,但以下几点应该会让你有所收获

from scrapy.selector import Selector

HTML="""
<td class="name table-participant">
  <a href="/soccer/argentina/superliga/independiente-san-martin-tIuN5Umrd/">
    <span class="bold">Independiente</span>
    "- San Martin T."
  </a>
</td>

<td class="name table-participant">
  <a href="/soccer/argentina/superliga/lanus-huracan-xIDIe0Gr/">
    "Lanus - "
    <span class="bold">Huracan</span>
  </a>
</td>

<td class="name table-participant">
  <a href="/soccer/argentina/superliga/rosario-central-colon-santa-fe-Q1Ye9Jpr/">Rosario Central - Colon Santa FE</a>
</td>
"""

def strip_and_join(x):
    l=[]
    for s in x:
        # strip whitespace and quotes
        s = s.strip().strip('"').strip()
        # drop now empty strings
        if s:
            l.append(s)
    return " ".join(l)

for x in Selector(text=HTML).xpath('//td[@class="name table-participant"]/a'):
    print strip_and_join(x.xpath('.//text()').extract())
从scrapy.selector导入选择器
HTML=”“”
"""
def带_和_连接(x):
l=[]
对于x中的s:
#删除空格和引号
s=s.strip().strip(“”).strip()
#现在删除空字符串
如果是:
l、 附加
返回“”连接(l)
对于选择器中的x(text=HTML).xpath('//td[@class=“name table participant”]/a'):
打印条带和连接(x.xpath('.//text()').extract())
请注意,为了清晰起见,我没有将代码压缩到单个列表理解中,尽管这当然是可能的

 ('//td[@class="name table-participant"]//*[self::a/ancestor::td or self::span]/text()').extract
from scrapy.selector import Selector

HTML="""
<td class="name table-participant">
  <a href="/soccer/argentina/superliga/independiente-san-martin-tIuN5Umrd/">
    <span class="bold">Independiente</span>
    "- San Martin T."
  </a>
</td>

<td class="name table-participant">
  <a href="/soccer/argentina/superliga/lanus-huracan-xIDIe0Gr/">
    "Lanus - "
    <span class="bold">Huracan</span>
  </a>
</td>

<td class="name table-participant">
  <a href="/soccer/argentina/superliga/rosario-central-colon-santa-fe-Q1Ye9Jpr/">Rosario Central - Colon Santa FE</a>
</td>
"""

def strip_and_join(x):
    l=[]
    for s in x:
        # strip whitespace and quotes
        s = s.strip().strip('"').strip()
        # drop now empty strings
        if s:
            l.append(s)
    return " ".join(l)

for x in Selector(text=HTML).xpath('//td[@class="name table-participant"]/a'):
    print strip_and_join(x.xpath('.//text()').extract())