繁体   English   中英

python lxml xpath在带有文本的列表中返回转义字符

[英]python lxml xpath returning escape characters in list with text

在上周之前,我在Python上的经验非常局限于我们网络上的大型数据库文件,突然间我进入了试图从html表中提取信息的世界。

经过大量阅读后,我选择使用lxml和xpath与Python 2.7来检索有问题的数据。 我使用以下代码检索了一个字段:

xpath = "//table[@id='resultsTbl1']/tr[position()>1]/td[@id='row_0_partNumber']/child::text()" 

产生了以下清单:

['\r\n\t\tBAR18FILM/BKN', '\r\n\t\t\r\n\t\t\t', '\r\n\t\t\t', '\r\n\t\t\t', '\r\n\t\t\t', '\r\n\t\t\t', '\r\n\t\t\t\r\n\t\t']

我认出了CR / LF和标签转义字符,我想知道如何避免它们?

这些字符是XML文档的一部分,这就是它们被返回的原因。 你无法避免它们,但你可以将它们剥离出来。 您可以对返回的每个项调用.strip()方法:

results = [x.strip() for x in results]

这将剥离前导和尾随空格。 如果没有看到您的实际代码和数据,就很难给出一个好的答案。

例如,给定此脚本:

#!/usr/bin/python

from lxml import etree

with open('data.xml') as fd:
    doc = etree.parse(fd)

results = doc.xpath(
    "//table[@id='results']/tr[position()>1]/td/child::text()")

print 'Before stripping'
print repr(results)

print 'After stripping'
results = [x.strip() for x in results]
print repr(results)

这个数据:

<doc>
  <table id="results">
    <tr>
      <th>ID</th><th>Name</th><th>Description</th>
    </tr>

    <tr>
      <td>
      1
      </td>
      <td>
      Bob
      </td>
      <td>
      A person
      </td>
      </tr>
    <tr>
      <td>
      2
      </td>
      <td>
      Alice
      </td>
      <td>
      Another person
      </td>
    </tr>
  </table>
</doc>

我们得到这些结果:

Before stripping
['\n\t\t\t1\n\t\t\t', '\n\t\t\tBob\n\t\t\t', '\n\t\t\tA person\n\t\t\t', '\n\t\t\t2\n\t\t\t', '\n\t\t\tAlice\n\t\t\t', '\n\t\t\tAnother person\n\t\t\t']
After stripping
['1', 'Bob', 'A person', '2', 'Alice', 'Another person']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM