xpath 一键去除前后空白、回车、换行

使用xpath方式,打印结果,经常出现大量换行、空格等情况

示例如下:

from lxml import etree
# data = etree.parse('./素材/示例网站.html')

parser = etree.HTMLParser(encoding="utf-8") # 出现读取错误时,需要加入parser参数
data = etree.parse('./素材/示例网站.html', parser=parser)
chuban = data.xpath('//p[@class="color-gray"]/text()')
print(chuban)

# 打印结果,出现大量换行、空格等情况
['\r\n                        [意] 埃莱娜·费兰特 / 人民文学出版社 / 2017-10\r\n                    ', 
 '\r\n                        [美] 彼得·布雷瓦 / 后浪丨文化发展出版社 / 2017-11\r\n                    ', 
 '\r\n                        刘震云 / 长江文艺出版社 / 2017-11-1\r\n                    ', 
 '\r\n                        [美] 约翰·约瑟夫·亚当斯 编 / 新星出版社 / 2017-10\r\n                    ', 
 '\r\n                        [英] 约翰·福尔斯 / 百花文艺出版社 / 2017-10\r\n                    ', 
 '\r\n                        [俄] 列夫·托尔斯泰 / 东方出版社 / 2017-10\r\n                    ', 
 '\r\n                        [美] 芭芭拉·金索沃 / 南海出版公司 / 2017-10\r\n                    ', 
 '\r\n                        [英] 格雷厄姆·格林 / 江苏凤凰文艺出版社 / 2017-11\r\n                    ', 
 '\r\n                        [加] 艾丽丝·门罗 / 理想国丨广西师范大学出版社 / 2017-11-1\r\n                    ', 
 '\r\n                        木心 / 理想国 | 广西师范大学出版社 / 2017-10\r\n                    ', 
 '\r\n                        [日] 岩井俊二 / 浙江文艺出版社 / 2017-10\r\n                    ', 
 '\r\n                        [英] 萨拉·沃特斯 / 世纪文景/上海人民出版社 / 2017-10\r\n                    ', 
 '\r\n                        [美] 菲利普·迪克 / 译林出版社 / 2017-10\r\n                    ', 
 '\r\n                        [日] 东野圭吾 / 南海出版公司 / 2017-11\r\n                    ', 
 '\r\n                        程波 / 张乐山 / 沐来文化/鹭江出版社 / 2017-9\r\n                    ', 
 '\r\n                        [日] 涩泽龙彦 / 广西师范大学出版社 / 2017-9\r\n                    ']

处理方法1:.strip()(保留列表)

使用一个推导式循环,直接替换掉原代码,可实现一步解决。(这里aaa可以随意取名,不冲突即可)

chuban = data.xpath('//p[@class="color-gray"]/text()') # 大量换行、空格的原代码

final_chuban = [aaa.strip() for aaa in chuban]
print(final_chuban)

['[意] 埃莱娜·费兰特 / 人民文学出版社 / 2017-10', '[美] 彼得·布雷瓦 / 后浪丨文化发展出版社 / 2017-11', 
 '刘震云 / 长江文艺出版社 / 2017-11-1', '[美] 约翰·约瑟夫·亚当斯 编 / 新星出版社 / 2017-10', 
 '[英] 约翰·福尔斯 / 百花文艺出版社 / 2017-10', '[俄] 列夫·托尔斯泰 / 东方出版社 / 2017-10', 
 '[美] 芭芭拉·金索沃 / 南海出版公司 / 2017-10', '[英] 格雷厄姆·格林 / 江苏凤凰文艺出版社 / 2017-11', 
 '[加] 艾丽丝·门罗 / 理想国丨广西师范大学出版社 / 2017-11-1', '木心 / 理想国 | 广西师范大学出版社 / 2017-10', 
 '[日] 岩井俊二 / 浙江文艺出版社 / 2017-10', '[英] 萨拉·沃特斯 / 世纪文景/上海人民出版社 / 2017-10', 
 '[美] 菲利普·迪克 / 译林出版社 / 2017-10', '[日] 东野圭吾 / 南海出版公司 / 2017-11', 
 '[美] 米奇·阿尔博姆 / 南海出版公司 / 2017-11', '[英] 约翰·克利兰 / 江苏凤凰文艺出版社 / 2017-9', 
 '[美] 菲利普·迪克 / 译林出版社 / 2017-10', '[意大利] 亚历山德罗·巴里科 / 浦睿文化·湖南文艺出版社 / 2017-10',']

处理方法2:re.sub('\s', '', ...)(保留列表)

final_chuban = [re.sub('\s', '', ''.join(aaa)) for aaa in chuban]
print(final_chuban)

['[意]埃莱娜·费兰特/人民文学出版社/2017-10', '[美]彼得·布雷瓦/后浪丨文化发展出版社/2017-11', 
 '刘震云/长江文艺出版社/2017-11-1', '[美]约翰·约瑟夫·亚当斯编/新星出版社/2017-10', 
 '[英]约翰·福尔斯/百花文艺出版社/2017-10', '[俄]列夫·托尔斯泰/东方出版社/2017-10', 
 '[美]芭芭拉·金索沃/南海出版公司/2017-10', '[英]格雷厄姆·格林/江苏凤凰文艺出版社/2017-11', 
 '[加]艾丽丝·门罗/理想国丨广西师范大学出版社/2017-11-1', '木心/理想国|广西师范大学出版社/2017-10', 
 '[日]岩井俊二/浙江文艺出版社/2017-10', '[英]萨拉·沃特斯/世纪文景/上海人民出版社/2017-10', 
 '[美]菲利普·迪克/译林出版社/2017-10', '[日]东野圭吾/南海出版公司/2017-11', 
 '[美]米奇·阿尔博姆/南海出版公司/2017-11', '[英]约翰·克利兰/江苏凤凰文艺出版社/2017-9', 
 '[美]菲利普·迪克/译林出版社/2017-10', '[意大利]亚历山德罗·巴里科/浦睿文化·湖南文艺出版社/2017-10', 
 '[法]瓦西利斯·亚历克萨基斯/人民文学出版社/2017-10', '[美]威廉·福克纳/北京燕山出版社/2017-11']
  • ''.join(...): 将从XPath表达式提取的文本内容组合成一个字符串。''.join()是字符串的连接方法,将列表或可迭代对象中的字符串元素连接成一个字符串。

  • re.sub('\s', '', ...): 这里使用了正则表达式的re.sub函数,用于替换字符串中的匹配项。\s表示匹配任何空白字符,包括空格、制表符等。第二个参数是替换后的内容,这里是空字符串。因此,这一步是将文本中的所有空白字符删除。

 

当然你也可以拆散列表

处理方法3:去掉文字前后的空白,保留中间的空格内容

for chu in chuban:
    print(chu.strip())

[意] 埃莱娜·费兰特 / 人民文学出版社 / 2017-10
[美] 彼得·布雷瓦 / 后浪丨文化发展出版社 / 2017-11
刘震云 / 长江文艺出版社 / 2017-11-1

处理方法4:去掉文字中所有空白字符,包括空格、制表符等

for chu in chuban:
    d = re.sub('\s', '', ''.join(chu))
    print(d)

[意]埃莱娜·费兰特/人民文学出版社/2017-10
[美]彼得·布雷瓦/后浪丨文化发展出版社/2017-11
刘震云/长江文艺出版社/2017-11-1

 

posted @ 2024-01-22 18:15  Magiclala  阅读(977)  评论(0编辑  收藏  举报