MKR
10
2020-10-09 23:47:11
3
90

[파이썬] bs4 (BeautifulSoup)에서 파싱방법에 대한 질문


안녕하세요~~ 웹사이트를 파싱하는 코드를 파이썬으로 짜고 있는데요, Bs4를 이용하고 있습니다.

어느 여러 사이트에서 여러 노래가 <li>로 나열되어 있고, <a href=로 링크가 나와있습니다. 그 링크를 한번 더 request로 불러와서 bs4로 파싱하여 가사마을 따올려고 하는데요..

<h2>자막</h2>
<p>나는 너를 믿었고</p>
<p>그도 너를 믿었는데</p>
<p>어떻게 너만</p>
<p>그렇게 이별할 수 있는건지</p>
<p>나는 매일 밤 너만을 생각하며</p>
<p>울고 있었네</p>
<h2>세부사항</h2>
<h2>자막</h2>
<p>나는 너를 믿었고</p>
<p>그도 너를 믿었는데</p>
<p>어떻게 너만</p>
<p>그렇게 이별할 수 있는건지</p>
<p>나는 매일 밤 너만을 생각하며</p>
<p>울고 있었네</p>
<div style="width: 100%; margin: 0px;">
  <div style="float: left; width: 48%;">
~~~~.....

이렇게 수직적인 구조로 이루어져 있어서 수많은 p태그중에 "자막" 태그 다음의 연속된 p태그의 내용을 불러오는 것이 가능할까요??


다른데에다가 영어로 검색해봤는데 검색을 영 똥으로 했는지 하나도 안나와서... 부탁드립니다!!!

0
  • 답변 3

  • 오마이걸_효정
    26
    2020-10-10 00:33:03
    tags = soup.find_all(['h2', 'p'])
    
        for tag in tags:
            print(' '.join(tag.text.split()))
    공식 문서 찾아보니까 완전 똑같이 h2 p로 나오네요 저렇게 리스트로 넘기고 tag.text == "자막" 이라면 다음 텍스트부터 저장한다 이런식으로 처리하면 되지 않을까요?
  • 페코옹
    565
    2020-10-10 11:07:58

    el = soup.find("h2", text="자막")

    lyrics = ""

    for p in el.find_next_siblings():

        if p.name != "p":

            break

        lyrics += p.text 


    요렇게 하면 어떨까요

  • MKR
    10
    2020-10-10 17:30:12

    오 그렇게 하면 되겠네요!! h2다음의 연속된 p택를 구하는 거나까 fin.....될것같네요!! 감사합낟.

  • 로그인을 하시면 답변 을 등록할 수 있습니다.