달나라 노트

Python : Web 페이지에서 원하는 태그의 정보 추출하기 본문

Python/Python ETC

Python : Web 페이지에서 원하는 태그의 정보 추출하기

CosmosProject 2021. 1. 23. 20:06
728x90
반응형

 

 

 

Web 페이지의 HTML코드를 가져온 다음에는 정보를 선택하는 작업이 필요합니다.

가져온 HTML 코드에서 내가 원하는 부분만 추출할 수 있어야 한다는 뜻입니다.

 

 

import requests
from bs4 import BeautifulSoup as bs

URL = "https://www.naver.com"

rq = requests.get(URL)
soup = bs(rq.content, 'html.parser')

li_list = soup.find_all('div', class_ = 'sc_timesquare')

for li in li_list:
    ul = li.select('ul > li')
    for l in ul:
        print(l.get_text())


- Output
미세좋음
초미세좋음

위 코드를 봐봅시다.

 

 

 

 

li_list = soup.find_all('div', class_ = 'sc_timesquare')

위 부분은 가져온 HTML 코드에서 class가 sc_timesquare인 div 태그의 정보를 모두 찾는(find_all) 과정입니다.

 

 

 

 

 

li_list = soup.find_all('div', class_ = 'sc_timesquare')

for li in li_list:
    ul = li.select('ul > li')


그리고 위 부분은 찾아온 sc_timesquare라는 class를 가진 div 태그 안에 존재하는 ul태그의 자식 li 태그를 가져오라는 의미입니다.

 

무슨소리냐면 아래처럼 가져온 div 태그에는 ul, li 태그 등 여러 내용들이 존재할 수 있겠죠.

<div>
    <ul>
        <li></li>
        <li></li>
        ...
    </ul>
    <ul>
        <li></li>
        <li></li>
        ...
    </ul>
    <p></p>
    ...
</div>

여기에 존재하는 것들 중 ul 태그 속의 자식태그인 li 태그 정보를 가져오라는 뜻입니다.

또한 div 태그 안에는 ul, li 태그가 여러 개 존재할 수 있으므로 반복문을 사용했죠.

 

이렇게 html 속 특정 태그를 가져올 때에는 BeautifulSoup 객체의 select를 사용할 수 있습니다.

 

 

 

 

 

 

 

 

import requests
from bs4 import BeautifulSoup as bs

URL = "https://www.naver.com"

rq = requests.get(URL)
soup = bs(rq.content, 'html.parser')

li_list = soup.find_all('div', class_ = 'sc_timesquare')

for li in li_list:
    ul = li.select('ul > li')
    print(ul)

일단 위처럼 코드를 실행하면 아래와같은 내용이 나올겁니다.

[<li class="air_item">미세<strong class="state state_good">좋음</strong></li>, <li class="air_item">초미세<strong class="state state_good">좋음</strong></li>]

 

즉, select까지만 하면 div 태그 안의 ul 태그에 속한 li 태그 정보를 가져올 수 있던거죠.

그러나 보기가 좀 어렵죠..? 저는 해당 태그 속 텍스트만 가져오고싶은데 이상한 태그들까지 다 딸려와버렸습니다.

 

 

 

li_list = soup.find_all('div', class_ = 'sc_timesquare')

for li in li_list:
    ul = li.select('ul > li')
    for l in ul:
        print(l.get_text())


- Output
미세좋음
초미세좋음

따라서 반복문을 한 번 더 사용하여 get_text라는 것을 이용했습니다.

이건 태그 속 텍스트만을 반환해주죠.

 

 

 

 

728x90
반응형
Comments