2016-10-06 4 views
4

나는 BeautifulSoup로 페이지를 고칩니다. 로직의 일부분은 때로 <td> 태그의 내용 중 일부가 <br> 일 수 있다는 것입니다.파이썬에서 CSV로 한 문자열을 두 열로 나누는 중

그래서 가끔은은 다음과 같습니다

<td class="xyz"> 
    text 1 
    <br> 
    text 2 
</td> 

을하고 경우에 따라서는 다음과 같습니다 :이 통해 반복하고 output_row 목록에 추가하고

<td class="xyz"> 
    text 1 
</td> 

나는 결국 목록에 추가하는 목록. 이전 형식이나 후자를 볼 때 텍스트를 하나의 셀에 넣기를 원합니다.

<br> 태그가 표시되는지 확인하는 방법을 찾았습니다. 왜냐하면 td.string이 아무 것도 표시되지 않고 텍스트 2에 항상 'ABC'가 포함되어 있기 때문입니다. 따라서 :

elif td.string == None: 
     if 'ABC' in td.contents[2]: 
      new_string = td.contents[0] + ' ' + td.contents[2] 
      output_row.append(new_string) 
      print(new_string) 
     else:  
      #this is for another situation and it works fine 

나는 이것을 Jupyter Notebook에서 인쇄 할 때 "텍스트 1 텍스트 2"를 한 줄로 표시합니다. 그러나 내 CSV를 열면 두 가지 열이 있습니다. 따라서 td.string에 내용 (<br> 태그가 없음)이 있으면 텍스트 1이 하나의 열에 나타나지만 <br> 태그가있는 부분에 도달하면 모든 데이터가 이동합니다.

목록에 추가하기 전에 두 문자열 (두 개의 열)을 연결 한 이유가 확실하지 않습니다. 나는이 같은 파일에 쓰고

:

with open('C:/location/file.csv', 'w',newline='') as csv_file: 
    writer=csv.writer(csv_file,delimiter=',') 
    #writer.writerow(headers) 
    for row in output_rows: 
     writer.writerow(row) 

csv_file.close 
+0

어떻게 파일을 쓰고 있습니까? – That1Guy

+0

OP 편집에 추가되었습니다. – strahanstoothgap

+0

내가 뭔가를 놓친다면 미안하지만'''join (td.text.split())'를 호출하여 어떤 '
'을 제거하고 그런 식으로 고쳐 줄 수 없습니까? – n1c9

답변

2
당신은 "스트립"과 "분리"로 get_text()를 사용하여 두 경우 모두를 처리 할 수 ​​

:

from bs4 import BeautifulSoup 

dat=""" 
<table> 
    <tr> 
     <td class="xyz"> 
      text 1 
      <br> 
      text 2 
     </td> 

     <td class="xyz"> 
      text 1 
     </td> 
    </tr> 
</table> 
""" 

soup = BeautifulSoup(dat, 'html.parser') 
for td in soup.select("table > tr > td.xyz"): 
    print(td.get_text(separator=" ", strip=True)) 

인쇄 :

text 1 text 2 
text 1 
+1

이게 _ 데이터를 _getting 더 나은 방법입니다 동의하지만, 내가 제대로 질문을 이해한다면, 문제는 문자열이 CSV에 쓸 때 두 개의 열로 분할된다는 것입니다. 나는 실제 데이터 OP에서 파일에 쓰고있는 ','이 있다고 의심한다. – That1Guy

+1

@ That1Guy 좋은 지적이지만, 결국 질문에 대한 직접적인 대답이 아닐 수도 있습니다. "데이터에 쉼표가 들어 있습니다"라는 이론이 맞는지 의심 스럽습니다. 감사! – alecxe

+0

@ That1Guy 고마워! 이상하게도 끈에 쉼표가 있지만 분리되지 않았습니다. 내가 2 열을 얻는 이유는 내 목록을 재설정하지 않았기 때문에 계속 변경하고 인쇄물을 바꿀 수 있었기 때문입니다. 이제는 CSV로 내보낼 수 있습니다. – strahanstoothgap

관련 문제