• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 엔지니어링

  • 해결 여부

    해결됨

Beautiful Soup 실습 출력 문의

24.04.07 13:48 작성 조회수 40

0

일단 따라 쳐봤는데

아래의 결과 처럼 나오는게 맞을까요?

 

html 변수에 </ul>이 있는데 혹시 앞에 <ul>은 없어도 동작 되나요?

from bs4 import BeautifulSoup

html = """
    <html><body>
    <div id="project">
    <h1 id="title">BIG DATA PROGRAMMING</h1>
    <p id='body'>DATA ANLYSIS AND SCRENCE</p>
    <p>DATA ACQUISTION PART1</p>
    </ul>
    <ul class="items">
    <li>CRAWLING</li>
    <li>SCRAPPING</li>
    <li>HYBRID WAY</li>
</div>
</body></html>
"""

soup = BeautifulSoup(html, 'html.parser')
h1 = soup.html.body.h1
p1 = soup.html.body.p
p2 = p1.next_sibling.next_sibling

print("h1 = " + h1.string)
print("p = " + p1.string)
print("p = " + p2.string)

title = soup.find(id="title")
body = soup.find(id="body")

print("#title=" + title.string)
print("#body=" + body.string)

h1 = soup.select_one("div#project > h1").string
print("h1 =", h1)

li_list = soup.select("div#project > ul.items > li")
for li in li_list:
    print("li =", li.string)

 

결과

python3 2_bs4_temp.py


h1 = BIG DATA PROGRAMMING
p = DATA ANLYSIS AND SCRENCE
p = DATA ACQUISTION PART1
#title=BIG DATA PROGRAMMING
#body=DATA ANLYSIS AND SCRENCE
h1 = BIG DATA PROGRAMMING
li = CRAWLING
li = SCRAPPING
li = HYBRID WAY

 

 

답변 1

답변을 작성해보세요.

1

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.04.09

안녕하세요, 인프런 AI 인턴입니다.

네, 제시해주신 코드로 실행했을 때, 결과는 정상적으로 나온 것이 맞습니다.
Beautiful Soup는 잘못된 HTML 코드를 분석할 때도 상당히 관대합니다. 따라서 <ul> 태그가 누락되어 있음에도 불구하고 파싱은 성공적으로 이루어지고 해당 부분에 대한 결과를 출력할 수 있습니다. 하지만 올바르고 명확한 HTML 문법을 사용하는 것이 좋으므로, 실제 코드를 작성할 때는 태그의 짝이 맞도록 주의해야 합니다.

코드에서 BeautifulSoup 객체를 생성하고 나서 요소를 찾거나 선택하는 메서드들은 HTML 구조에서 지정된 요소를 정확히 찾아 냅니다. soup.html.body.h1, soup.find(id="title"), soup.select_one("div#project > h1"), soup.select("div#project > ul.items > li") 등 모든 메서드는 지정된 요소를 정확히 탐색하여 결과를 출력합니다. 따라서 <ul>이 누락되어 있어도 파싱 과정에서 필요한 요소를 찾는데 문제가 없습니다.

하지만, 좋은 HTML 문서 작성 관행에 따라, 태그의 사용이 적절하게 시작되고 종료되도록 하는 것이 중요합니다. 이는 코드의 가독성과 유지보수성을 개선하는데 도움이 됩니다.

홍태경님의 프로필

홍태경

질문자

2024.04.09

<ul> 는 어느 부분에 넣어야 할까요?