2017-10-18 6 views
1

저는 일부 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> 
""" 

:

는 텍스트에서 긁어되어야하는 HTML 요소이다

예상 결과 :

11525 23 AVE EDMONTON, AB, T6J 4T3 

이 줄에 .strip().replace("\n","")을 적용하려고 시도했지만 이라는 오류가 발생했습니다.

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

Andersson 경에게 감사드립니다. 당신은 항상 원하는 출력에만 국한됩니다. 다시 한번 감사합니다. – 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 죄송합니다. 단일 문자열을 변환해야한다고 생각했는데 "결과가 있습니다."섹션에 인쇄 된 괄호가 없으므로 문자열 목록이 있음을 알지 못했습니다. . 이미 문자열 목록이 있다면'.split' 단계를 수행 할 필요가 없습니다. 나는 곧 내 대답에 더 많은 코드를 추가 할 것이다. –