从报废项目中提取日期和其他数据

2024-06-01 09:43:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个Python代码,使用lxml、urllib和csv来获取a Brazil government site中的演讲稿。你知道吗

我可以使用XPath找到每个演讲的标题和链接,但不能找到确切的日期,因为之前没有演讲日期的特定标记。你知道吗

当我使用XPath '//span[@class="summary-view-icon"]/text()时,scraper会返回日期、时间和单词“página”(第页,葡萄牙语)。我知道这个Xpath不对,但我不知道如何只选择一天。你知道吗

即使犯了这个错误,我还是能够将废弃的内容转换成一个列表,并编辑删除除日期之外的所有内容。问题是,正如你在下面看到的,最终的列表还有一些我不能删除的字符。你知道吗

这里似乎有两种解决方案:正确使用XPath或编辑列表中的其他字符。我该怎么做?你知道吗

['\n 18/12/2015\n','\n 21/12/2015\n','\n 21/12/2015\n','\n2015年12月22日\n','\n 2015年12月22日\n','\n 2015年12月22日\n','\n2016年1月11日\n','\n 2016年1月19日\n','\n 2016年1月21日\n','\n 26/01/2016\n','\n 27/01/2016\n','\n 27/01/2016\n','\n2016年1月28日\n','\n 2016年2月1日\n','\n 2016年2月1日\n','\n2016年2月2日\n','\n 2016年2月2日\n','\n 2016年2月2日\n','\n 03/02/2016\n','\n 03/02/2016\n','\n 19/02/2016\n','\n2016年2月19日\n','\n 2016年2月22日\n','\n 2016年2月26日\n','\n2016年2月26日\n','\n 2016年3月2日\n','\n 2016年3月3日\n','\n 04/03/2016\n','\n 07/03/2016\n','\n 04/02/2016\n','\n 08/03/2016\n','\n 09/03/2016\n','\n2016年3月17日\n','\n 2016年3月18日\n','\n 2016年3月22日\n','\n2016年3月23日\n','\n 2016年3月23日\n','\n 2016年3月30日\n','\n 31/03/2016\n','\n 01/04/2016\n']


Tags: csv代码编辑标题内容列表siteurllib
3条回答

请尝试使用XPath中的以下命令将结果缩小到仅包含日期:

//span[@class="summary-view-icon"][i/@class="icon-day"]/text()[normalize-space()]

上面XPath的最后一位(text()[normalize-space()])只返回非空文本节点。从这里开始,您仍然需要使用strip()删除不必要的空白:

query = '//span[@class="summary-view-icon"][i/@class="icon-day"]/text()[normalize-space()]'
dates = root.xpath(query)
result = [date.strip() for date in dates]

可以使用strip从列表中的元素中删除所有换行符/空格:

new_list = [item.strip() for item in old_list]

编辑:您说过您可以将结果转换为问题中的列表,这样您就可以去掉其中的元素。你知道吗

这会让你得到你想要的:

items = response.xpath('//div[@id="content-core"]//div[contains(@class, "tileItem")]')
for item in items:
    date = item.xpath('normalize-space(.//span[@class="summary-view-icon"][i[@class="icon-day"] ]//text()[normalize-space()])')

使用normalize space两次将剥离删除空结果+剥离最终结果的所有空白。你知道吗

相关问题 更多 >