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개
예를들어 다음과 같이 하시면 가능하지 않을까 합니다.
</p>
<p>from bs4 import BeautifulSoup</p>
<p>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>
'''</p>
<p>soup = BeautifulSoup(html_code, 'html.parser')</p>
<p># 'badge-light' 클래스를 가진 span 태그들을 찾아서 텍스트를 추출
genres_span = soup.find_all('span', class_='badge-light')
genres = [span.get_text(strip=True) for span in genres_span]</p>
<p># 리스트를 쉼표로 구분된 문자열로 변환
result = ','.join(genres)</p>
<p>print(result)</p>
<p>
답변에 대한 댓글 5개
혹시
<span class="badge badge-light" style="font-size:100%;"></span>
이게 있으면 마지막에 , 가 하나씩 붙네요
데이터가 있는것만 ,콤마가 붙게 할수는 없나요?
로맨스,일상,학원,액션, => 로맨스,일상,학원,액션
감사합니다.
[code]
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)
[/code]
정말 감사합니다.
다른 문제가 있어서 문의 드립니다.
아래와 같은 비슷한 소스가 한페이지에 있어서
결과값 : 로맨스,일상,일상,드라마
이렇게 나오네요
원하는 결과값 : 로맨스,일상
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>
'''
댓글을 작성하려면 로그인이 필요합니다.
BeautifulSoup를 사용하여 HTML 코드를 파싱하고 필요한 정보를 추출하는 방식으로 하시면 되지 않을까 합니다.
참고 하셔서 원시는 형식으로 구현을 하시면 될 것 같습니다.
</p>
<p>from bs4 import BeautifulSoup</p>
<p>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>
<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>
<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>
<p>soup = BeautifulSoup(html_code, 'html.parser')</p>
<p># 결과값을 저장할 리스트
result_genres = []</p>
<p># p 태그 중에서 class가 "text-muted"이고 "mb-3"이 아닌 것들을 선택
genre_paragraphs = soup.find_all('p', class_='text-muted', class_=lambda x: x != 'mb-3')</p>
<p>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)</p>
<p># 중복을 제거하고 출력
result_genres = list(set(result_genres))
print(result_genres)
답변에 대한 댓글 6개
class_= lambda x: x != 'mb-3'
이부분에서 오류가 발생해서 실행이 안되네요.
감사합니다.
[code]
// 이전 코드 동일
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)
[/code]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
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)
[code]
// 이전 코드 동일
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)
[/code]
웹메이킹님 덕분에 잘 처리 되었습니다.
감사합니다.
댓글을 작성하려면 로그인이 필요합니다.
</p>
<p>import re</p>
<p> </p>
<p>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>
"""</p>
<p> </p>
<p>arr = re.findall(r'badge.*?>([^\s<]+)', strs)
arr_tostring = ','.join(arr)
print(arr)
print(arr_tostring)</p>
<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)
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
감사합니다.