2017-10-18 70 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'步驟。我會盡快添加更多代碼給我的答案。 –