본문 바로가기
개발일지/selenium, BeautifulSoup, requests

beautifulsoup 태그원리 이해

by 개발에정착하고싶다 2022. 6. 23.

제로베이스 수업을 하며 따라하는거랑 흐름에 대한 설명도 해주시는데, 태그에 대한 설명은 두루뭉술하게 하셔서 보충이 안되는 부분이라 별도로 책이든 강의든 찾아봤다.

 

그 중에서 유데미에서 "따라하며 익히는 파이썬 데이터수집 마스터"를 찾았는데 완전 강추다.

진짜 유데미 세일기간 한달동안에도 몇번씩 오니깐 beautifulsoup, selenium, request 원리 이해안되시는 분들은 꼭 사서 들었으면 좋겠다.

 

그 중에 html 스크래핑 해올때 태그 원리에 대한 이해다. 이건 정말 미쳤다. 내기준에서.

 

==============================================================================

 

# 기본 개요

 

soup.select('태그 조건') # soup 데이터 내에서 ...조건에 해당하는 태그 모두 다 찾아줘

# 많이 쓰이는 것
soup.select('태그명')
soup.select('.class속성값')
soup.select('#id속성값')
soup.select('태그명.class속성값')

# id값, 클래스값이 없을 경우에는 부보태그로 추적이 들어가야한다.
# 단순 태그찾기로 하면 결과값이 너무 많이 나올 수 있기 때문이다.
# 같은 라인에 들여쓰기 되어있는 태그는 형제태그다.
# 부모태그는 반드시 위에 있다.

soup.select('직계부모태그 > 자손태그')

# 만약에 내가 찾고자 하는 정보가 <태그 클래스> 값 </태그> 이런식의 구조라면
soup.select('tag.class') # 이런식으로 해주면 되고
# 부모태그에 아이디가 있을 경우엔
soup.select('p_tag#p_id > tag.class') #이런식으로 해주면 된다.
# 예시
soup.select('div.head_view > h3.tit_view')

 

========================================================================

 

# 원하는 html 텍스트 스크래핑

 

# 이렇게 리스트의 값이 1개로 좁혀졌거나
# 리스트화 했더라도 리스트중 슬라이스로 1개의 리스트만 선택하면 비로소
# text 기능 이용이 가능하다.
soup.select('div.head_view > h3.tit_view')

 

즉, len으로 뽑아봤을때 값이 1개거나 10개 이상이더라도 핵심은 "리스트화"해서 1개로 활용 가능한 상태로 우선 만들어주는거다.

 

여기서부터가 포인트인데.

그냥

soup.select('div.head_view > h3.tit_view')

라고 출력하면

[<h3 class="tit_view" data-translation="true">"외국인 기획조사, 자금 조달 과정 살피려는 것..중국인 타깃 아냐"</h3>]

 

# 이렇게 리스트에 한번 씌여서 나온다. 여기에 .text를 해주면 어트리뷰트 에러가 생긴다.

이것을 리스트형태로 뽑는것으로 가공하자면 (len값이 1개로 있다 하더라도 리스트화를 꼭 해줘야한다.)
soup.select('div.head_view > h3.tit_view')[0]
<h3 class="tit_view" data-translation="true">"외국인 기획조사, 자금 조달 과정 살피려는 것..중국인 타깃 아냐"</h3>
# 이렇게 []로 감싸져있는지 안감싸져있는지가 다르다.
그리고 soup.select('div.head_view > h3.tit_view')[0]에다가 .text를 하면 정상적으로
텍스트 추출이 된다.