2017-10-18 5 views
1

私はいくつかのhtml要素からいくつかのテキストを取り出すためのスクリプトをPythonで書いています。スクリプトはそれを今解析することができます。しかし、問題は結果が奇妙に見えることです。どうすれば修正できますか?どんな助力も高く評価されます。スクラップされたテキスト間のスペースを取り除くことができません

これは、テキストから掻き取りする必要があるHTML要素である:私がいる

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 
をこれは私がしようとしているスクリプトです

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> 
""" 

期待される結果:

11525 23 AVE EDMONTON, AB, T6J 4T3 

この行に.strip().replace("\n","")を貼り付けようとしましたが、[item.text for item in root.cssselect(".postal-address p")]にはエラーnone type objectが投げられました。

Btw、私は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"、 "")スラッシュをエスケープする必要があると思います。あなたは、単一引用符を使用するとどうなります

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

....これは時々混乱することができ、それをしようとせず、私はあなたがそれを逃れるが、これらのいずれかを試してくださいする必要がありますどのように多くのslasshesを伝えることはできませんか?

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、あなたの答えのために。それは働いているようですが、私はこの行に同じ方法を適用するべきですか?ここでは主な懸念事項であるroot.cssselect( "。postal-address p")] 'のitem.textです。 – SIM

+0

@Topto申し訳ありませんが、私はあなたがただ一つの文字列を変換する必要があると思っていました。あなたの "Result I'm having:"セクションには括弧が印刷されていないので、 。すでに文字列のリストがある場合、 '.split'ステップを実行する必要はありません。私はすぐに私の答えにいくつかのコードを追加します。 –

関連する問題