2017-10-18 119 views
1

我已经在python中编写脚本来从一些html元素中删除一些文本。脚本现在可以解析它。但是,问题是结果看起来很奇怪,它们之间有一堆空格。我该如何解决它?任何帮助将不胜感激。无法删除抓取的文本之间的空间

这是HTML元素的文本应该被刮掉:

html=""" 
<div class="postal-address"> 
     <p>11525 23 AVE</p> 


     <p>EDMONTON, 
     AB 
     , 
     T6J 4T3 
     </p> 

     <p><a rel="nofollow" href="mailto:[email protected]">[email protected]</a></p> 
     <p><a rel="nofollow" href="http://www.something.org" target="_blank">Visit our Web Site</a></p> 
    </div> 
""" 

这是我与尝试脚本:我有

from lxml.html import fromstring 

root = fromstring(html) 
address = [item.text for item in root.cssselect(".postal-address p")] 
print(address) 

结果:

11525 23 AVE, EDMONTON,\n  AB\n  ,\n  T6J 4T3\n 

预期结果:

11525 23 AVE EDMONTON, AB, T6J 4T3 

我试着在这一行中应用.strip().replace("\n","")[item.text for item in root.cssselect(".postal-address p")],但它抛出一个错误,显示none type object

顺便说一句,我不希望有任何解决方案与regex有关。提前致谢。

回答

1

尝试以下解决方案,让我知道在任何问题时:

address = [" ".join(item.text.split()).replace(" ,", ",") for item in root.cssselect(".postal-address p") if item.text] 

输出:

['11525 23 AVE', 'EDMONTON, AB, T6J 4T3'] 
+0

非常感谢先生安德森,为这样一个有效的答案。你总是特定于所需的输出。再次感谢。 – SIM

0

当你做.replace(“\ n”,“”)我认为你必须逃避斜线。这可能是有时混乱,但不尝试它,我不能告诉你,你需要多少slasshes逃跑,但尝试其中之一....

.replace("\\n","") 
.replace("\\\n","") 
.replace("\\\\n","") 

当您使用单引号会发生什么?

0
  1. 在逗号分隔源字符串。
  2. 剥离结果列表中每个字符串的任何开头或结尾空白。
  3. 加入使用', '作为分隔符的字符串。

像这样:

src = '11525 23 AVE, EDMONTON,\n  AB\n  ,\n  T6J 4T3\n' 
print(', '.join([s.strip() for s in src.split(',')])) 

输出

11525 23 AVE, EDMONTON, AB, T6J 4T3 

如果你已经有了一个字符串列表,这是更简单:

address = [ 
    '11525 23 AVE', 
    ' EDMONTON', 
    '\n  AB\n  ', 
    '\n  T6J 4T3\n' 
] 

print(', '.join([s.strip() for s in address])) 
+0

由于PM 2Ring,你的答案。它似乎在工作,但我应该如何在这行应用相同的命令'[item.text for item in root.cssselect(“。postal-address p”)]'这是这里主要关心的问题。 – SIM

+0

@Topto对不起,我以为你只需要转换一个单一的字符串,我没有注意到你已经有一个字符串列表,因为在你的“结果我有:”部分没有任何括号被打印。如果你已经有一个字符串列表,那么你不需要执行'.split'步骤。我会尽快添加更多代码给我的答案。 –