首页 > 解决方案 > 如何在一个单元格中从 xpath 将字符串写入 csv?

问题描述

我用下面的代码得到内容“number1”和“number2”,就像“A”,['B','C']。但是,在.csv文件中,B和C不在我想要的同一个单元格中.如何在一个单元格中获取['B','C']。另外,我有多个换行符。

  html = etree.HTML(res.text)
    number1 = html.xpath('//td[contains(text(),"Eva")]/following-sibling::td[1]/text()')[0]
    number2 = html.xpath('//td[contains(text(),"Jack")]/following-sibling::td[1]/span/text()')[0]
    mes = '%s,%s' % (str(number1), str(number2))
    mes.split()
    print(i, mes + '\n')
    with open('D:/test.csv', 'a+', encoding='utf-8-sig') as f:
        f.write(mes+'\n')

标签: pythonxpathexport-to-csv

解决方案


您可以尝试使用以下内容修复您的 XPath(添加normalize-space()以排除空白节点并translate删除 中的空白number2)。您也可以","在连接字符串时删除 ,否则split()没有参数的将不起作用:

number1 = html.xpath('//td[contains(text(),"Eva")]/following-sibling::td[1]/text()[normalize-space()]')[0]

number2 = html.xpath('translate(//td[contains(text(),"Jack")]/following-sibling::td[1]/span/text()[normalize-space()]," ","")')

mes = '%s %s' % (str(number1), str(number2))

例子 :

data = """HTML
<table>
<td>15</td>
<td>18, 43</td>
</table>
HTML"""

import lxml.html
tree = lxml.html.fromstring(data)
number1=tree.xpath('//td[1]/text()')[0]
number2=tree.xpath('translate(//td[2]/text()," ","")')

#mes=number1+" "+number2
mes = '%s %s' % (str(number1),str(number2))
print(mes.split())

输出 :

['15', '18,43']

推荐阅读