python 콤마로 구분하는법

python 콤마로 구분하는법

QA

python 콤마로 구분하는법

본문

안녕하세요.

 

python select나 다른 방법이 있으면 아래와 같은 소스가 있을시

로맨스,일상,학원,액션

콤마구분로 구분하여 tag를 만들려고 합니다.

어떻게 하면 될까요?

감사합니다.

 

<p class="text-muted" style="font-size:13px;">
    <span class="text-muted" style="">장르</span> 
    <span class="badge badge-light" style="font-size:100%;">로맨스 </span>
    <span class="badge badge-light" style="font-size:100%;">일상 </span>
    <span class="badge badge-light" style="font-size:100%;">학원 </span>
    <span class="badge badge-light" style="font-size:100%;">액션 </span>
    <span class="badge badge-light" style="font-size:100%;"></span>     
</p>

이 질문에 댓글 쓰기 :

답변 4

예를들어 다음과 같이 하시면 가능하지 않을까 합니다.

 


from bs4 import BeautifulSoup
html_code = '''
<p class="text-muted" style="font-size:13px;">
    <span class="text-muted" style="">장르</span>
    <span class="badge badge-light" style="font-size:100%;">로맨스 </span>
    <span class="badge badge-light" style="font-size:100%;">일상 </span>
    <span class="badge badge-light" style="font-size:100%;">학원 </span>
    <span class="badge badge-light" style="font-size:100%;">액션 </span>
    <span class="badge badge-light" style="font-size:100%;"></span>   
</p>
'''
soup = BeautifulSoup(html_code, 'html.parser')
# 'badge-light' 클래스를 가진 span 태그들을 찾아서 텍스트를 추출
genres_span = soup.find_all('span', class_='badge-light')
genres = [span.get_text(strip=True) for span in genres_span]
# 리스트를 쉼표로 구분된 문자열로 변환
result = ','.join(genres)
print(result)

안녕하세요.
혹시
<span class="badge badge-light" style="font-size:100%;"></span> 
이게 있으면 마지막에 , 가 하나씩 붙네요
데이터가 있는것만 ,콤마가 붙게 할수는 없나요?
로맨스,일상,학원,액션,    => 로맨스,일상,학원,액션
감사합니다.

다음과같이 해 보시겠어요


from bs4 import BeautifulSoup

html_code = '''
<p class="text-muted" style="font-size:13px;">
    <span class="text-muted" style="">장르</span>
    <span class="badge badge-light" style="font-size:100%;">로맨스 </span>
    <span class="badge badge-light" style="font-size:100%;">일상 </span>
    <span class="badge badge-light" style="font-size:100%;">학원 </span>
    <span class="badge badge-light" style="font-size:100%;">액션 </span>
    <span class="badge badge-light" style="font-size:100%;"></span>   
</p>
'''

soup = BeautifulSoup(html_code, 'html.parser')

# 'badge-light' 클래스를 가진 span 태그들을 찾아서 텍스트를 추출
genres_span = soup.find_all('span', class_='badge-light')

# 빈 span 태그를 제외하고 데이터가 있는 경우에만 콤마를 붙임
genres = [span.get_text(strip=True) for span in genres_span if span.get_text(strip=True)]

# 리스트를 쉼표로 구분된 문자열로 변환
result = ','.join(genres)
print(result)

안녕하세요.
다른 문제가 있어서 문의 드립니다.
아래와 같은 비슷한 소스가 한페이지에 있어서
결과값 : 로맨스,일상,일상,드라마
이렇게 나오네요

원하는 결과값 : 로맨스,일상

class=text-muted 이면서 class=badge-light 면 될거 같은데
어떻게 하면 될까요?
감사합니다.
(text-muted mb-3 제외)

html_code = '''
<p class="text-muted" style="font-size:13px;">
    <span class="text-muted" style="">장르</span>
    <span class="badge badge-light" style="font-size:100%;">로맨스 </span>
    <span class="badge badge-light" style="font-size:100%;">일상 </span>
    <span class="badge badge-light" style="font-size:100%;"></span> 
</p>

<p class="text-muted mb-3" style="margin-top:-30px;">
  <span class="badge badge-light"></span>
  <span class="badge badge-light">일상</span>
  <span class="badge badge-light"></span>
</p>

<p class="text-muted mb-3" style="margin-top:-30px;">
  <span class="badge badge-light"></span>
  <span class="badge badge-light">드라마</span>
  <span class="badge badge-light"></span>
</p>
'''

안녕하세요.

아래의 내용을 참고해 보시겠어요?

 

genres = "로맨스,일상,학원,액션"

# 장르를 콤마로 분리
genre_list = genres.split(',')

# HTML 태그 생성
html_tags = '<p class="text-muted" style="font-size:13px;">\n' \
            '    <span class="text-muted" style="">장르</span> \n'

for genre in genre_list:
    html_tags += f'    <span class="badge badge-light" style="font-size:100%;">{genre} </span>\n'

html_tags += '    <span class="badge badge-light" style="font-size:100%;"></span>     \n' \
             '</p>'

print(html_tags)
 


import re
 
strs = """
<p class="text-muted" style="font-size:13px;">
    <span class="text-muted" style="">장르</span> 
    <span class="badge badge-light" style="font-size:100%;">로맨스 </span>
    <span class="badge badge-light" style="font-size:100%;">일상 </span>
    <span class="badge badge-light" style="font-size:100%;">학원 </span>
    <span class="badge badge-light" style="font-size:100%;">액션 </span>
    <span class="badge badge-light" style="font-size:100%;"></span>     
</p>
"""
 
arr = re.findall(r'badge.*?>([^\s<]+)', strs)
arr_tostring = ','.join(arr)
print(arr)
print(arr_tostring)

BeautifulSoup를 사용하여 HTML 코드를 파싱하고 필요한 정보를 추출하는 방식으로 하시면 되지 않을까 합니다.

 

참고 하셔서 원시는 형식으로 구현을 하시면 될 것 같습니다.


from bs4 import BeautifulSoup
html_code = '''
<p class="text-muted" style="font-size:13px;">
    <span class="text-muted" style="">장르</span>
    <span class="badge badge-light" style="font-size:100%;">로맨스 </span>
    <span class="badge badge-light" style="font-size:100%;">일상 </span>
    <span class="badge badge-light" style="font-size:100%;"></span> 
</p>
<p class="text-muted mb-3" style="margin-top:-30px;">
  <span class="badge badge-light"></span>
  <span class="badge badge-light">일상</span>
  <span class="badge badge-light"></span>
</p>
<p class="text-muted mb-3" style="margin-top:-30px;">
  <span class="badge badge-light"></span>
  <span class="badge badge-light">드라마</span>
  <span class="badge badge-light"></span>
</p>
'''
soup = BeautifulSoup(html_code, 'html.parser')
# 결과값을 저장할 리스트
result_genres = []
# p 태그 중에서 class가 "text-muted"이고 "mb-3"이 아닌 것들을 선택
genre_paragraphs = soup.find_all('p', class_='text-muted', class_=lambda x: x != 'mb-3')
for paragraph in genre_paragraphs:
    # 현재 p 태그의 하위에 있는 span 태그 중에서 class가 "badge-light"인 것들의 텍스트 추출
    genres = [span.text.strip() for span in paragraph.find_all('span', class_='badge-light')]
    
    # 결과값 리스트에 추가
    result_genres.extend(genres)
# 중복을 제거하고 출력
result_genres = list(set(result_genres))
print(result_genres)

다음과 같이 수정해 보시겠어요?


// 이전 코드 동일

soup = BeautifulSoup(html_code, 'html.parser')

# 결과값을 저장할 리스트
result_genres = []

# p 태그 중에서 class가 "text-muted"이고 "mb-3"이 아닌 것들을 선택
genre_paragraphs = soup.find_all('p', class_='text-muted', class_=lambda x: x and 'mb-3' not in x)

for paragraph in genre_paragraphs:
    # 현재 p 태그의 하위에 있는 span 태그 중에서 class가 "badge-light"인 것들의 텍스트 추출
    genres = [span.text.strip() for span in paragraph.find_all('span', class_='badge-light')]
    
    # 결과값 리스트에 추가
    result_genres.extend(genres)

# 중복을 제거하고 출력
result_genres = list(set(result_genres))
print(result_genres)

genre_paragraphs = soup.find_all('p', class_='text-muted', class_=lambda x: x and 'mb-3' not in x)
                                                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SyntaxError: keyword argument repeated: class_

안녕하세요.
똑같은 오류가 발생하네요.


from bs4 import BeautifulSoup
html_code = '''
<p class="text-muted" style="font-size:13px;">
    <span class="text-muted" style="">장르</span>
    <span class="badge badge-light" style="font-size:100%;">로맨스 </span>
    <span class="badge badge-light" style="font-size:100%;">일상 </span>
    <span class="badge badge-light" style="font-size:100%;"></span>
</p>
<p class="text-muted mb-3" style="margin-top:-30px;">
  <span class="badge badge-light"></span>
  <span class="badge badge-light">일상</span>
  <span class="badge badge-light"></span>
</p>
<p class="text-muted mb-3" style="margin-top:-30px;">
  <span class="badge badge-light"></span>
  <span class="badge badge-light">드라마</span>
  <span class="badge badge-light"></span>
</p>
'''
soup = BeautifulSoup(html_code, 'html.parser')
# 결과값을 저장할 리스트
result_genres = []
# p 태그 중에서 class가 "text-muted"이고 "mb-3"이 아닌 것들을 선택
genre_paragraphs = soup.find_all('p', class_='text-muted', class_=lambda x: x and 'mb-3' not in x)
for paragraph in genre_paragraphs:
    # 현재 p 태그의 하위에 있는 span 태그 중에서 class가 "badge-light"인 것들의 텍스트 추출
    genres = [span.text.strip() for span in paragraph.find_all('span', class_='badge-light')]
   
    # 결과값 리스트에 추가
    result_genres.extend(genres)

# 중복을 제거하고 출력
result_genres = list(set(result_genres))
print(result_genres)

다음과 같이 시도해 볼 수 있을 것 같습니다.


// 이전 코드 동일

soup = BeautifulSoup(html_code, 'html.parser')

# 결과값을 저장할 리스트
result_genres = []

# class가 "text-muted"이면서 "mb-3"이 아닌 p 태그를 선택
genre_paragraphs = soup.find_all('p', class_=lambda x: x and 'text-muted' in x and 'mb-3' not in x)

for paragraph in genre_paragraphs:
    # 현재 p 태그의 하위에 있는 span 태그 중에서 class가 "badge-light"인 것들의 텍스트 추출
    genres = [span.text.strip() for span in paragraph.find_all('span', class_='badge-light')]
   
    # 결과값 리스트에 추가
    result_genres.extend(genres)

# 중복을 제거하고 출력
result_genres = list(set(result_genres))
print(result_genres)

답변을 작성하시기 전에 로그인 해주세요.
전체 36
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT