제로베이스 수업을 하며 따라하는거랑 흐름에 대한 설명도 해주시는데, 태그에 대한 설명은 두루뭉술하게 하셔서 보충이 안되는 부분이라 별도로 책이든 강의든 찾아봤다.
그 중에서 유데미에서 "따라하며 익히는 파이썬 데이터수집 마스터"를 찾았는데 완전 강추다.
진짜 유데미 세일기간 한달동안에도 몇번씩 오니깐 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를 하면 정상적으로
텍스트 추출이 된다.
'개발일지 > selenium, BeautifulSoup, requests' 카테고리의 다른 글
beautifulsoup netflex(넷플릭스) title 가져오기 복기 (0) | 2022.06.23 |
---|---|
beautifulsoup alt, href 값등 가져오기 (드디어 알았다 ㅠㅠ) (0) | 2022.06.23 |
[selenium] chromedriver_autoinstaller로 크롬드라이버 버전 일치화 에러해결 (0) | 2022.06.22 |
또다시 selenium 에러.. (0) | 2022.06.08 |
Beautifulsoup 재수강 시작 (attribute error) (0) | 2022.06.07 |