python - 如何在一个单元格中从 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')
解决方案
您可以尝试使用以下内容修复您的 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']
推荐阅读
- mysql - MySQL查询语法错误,无法弄清楚
- html - 如何在响应式 div 中有两个重叠元素而不会导致绝对问题?
- kubernetes - K8s 的 Helm 网络策略
- spring-boot - 继承JpaRepository的接口上必须加@Repository吗?
- docker - Groovy 脚本在 JMeter 分布式设置的服务器上使用 org.apache.jmeter.services.FileServer 抛出 FileNotFoundException
- c++ - Cmake - 为 iOS 交叉编译 C++ 项目
- spring-boot - 未从 Spring Boot API 报告的新 Relic 事务
- vue.js - 有人请解释一下 now 的用途以及它是如何在这里工作的
- powerbi - 刷新power bi桌面时获取“断点已达到断点”
- azure - 使用特定规则请求应用程序时重写主机 - Azure 应用程序网关