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

beautifulsoup 태그원리 이해

by 다니엘의 개발 이야기 2022. 6. 23.
320x100

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

 

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

진짜 유데미 세일기간 한달동안에도 몇번씩 오니깐 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를 하면 정상적으로
텍스트 추출이 된다.

300x250