일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 기업 조사 빨리 하는 법
- Resources are low on NN
- code=0)
- hadoop safe mode
- mac hive
- Safe mode is ON
- 이더리움 #ethereum
- mac hadoop 설치
- mac hadoop
- hadoop safe mode leave
- 카카오 자물쇠와 열쇠
- 카카오 2020 코테
- 자소서 빨리
- 이더리움
- hive beeline
- is not allowed to impersonate hive (state=08S01
- 자소서 시간 줄이기
- 도커 교과서
- mac hive 3
- hive beeline 설정
- hive beeline 실행
- mac hadoop 3
- 자소서 빨리 쓰는 법
- Could not open client transport with JDBC Uri: jdbc:hive2://localhost:10000
- 백준 18428
- hive beeline 에러
- Failed to connect to localhost:10000
- 자소서 너무 오래 걸림
- mac hadoop 설정
- 카카오 2020 코딩테스트
- Today
- Total
A seeker after truth
231025 수 Day7 - 크롤링3: BeautifulSoup 본문
크롤링 대상 사이트: https://books.toscrape.com/catalogue/category/books/travel_2/index.html
를 분석해보자.
여기서 <div class="container-fluid page">부터 시작해, div 이하로만 타고타고 하위 요소로 들어가면 우리가 원하는 '책 제목' 데이터가 어디있는지 찾아낼 수 있다.
결국 우리가 찾는 건 section 태그 안 2번째 div 안에 표(Ordered List) 형식으로 나열돼 있는 걸 볼 수 있음.
마침내 찾아냈다 요거다. 여기 있는 "It's only the Himalayas". 이걸 컨텐츠 기반으로 스크래핑 한다고 하는데, 타겟팅 하는 사이트 대상으로 모두 이 방법으로 크롤링 하는건 그렇게 좋은 행위는 아니다. 왜냐면 구조가 바뀌기 때문임. 그래서 특정 태그를 타겟팅해 스크래핑 하는 건 사실 가장 간단하면서 가장 좋지 않은 방법이다. 그러나 직관적이기 때문에 앞으로는 계속 이 방법으로 할 예정.
꿀팁인데, 이렇게 하면 검사해서 찾고자 하는 태그로 바로 이동함...😱 세상에..
그럼 이제 해야 하는 고민은 저 태그를 찾기 위해? 어떤 정보를 찾아야 하는지..? 를 고민해야 한다..? 상대적 위치로 보면 h3 안에 책 제목을 갖고 있고, h3태그 이하를 펴보면
이와 같이 11개의 li 태그로 이뤄짐. 이 11개가 우리가 원하는 특정 요소 즉 타이틀을 가리킨단 사실을 알 수 있다. 그렇다면 우리는 저 h3라는 집합을 모두 갖고와라! 라는 코드를 작성할 수 있다. 이 정책을 구현하면 스크립트(스크래핑?)은 끝난다. 근데 이걸 갖고 오려 했더니 생각보다 굉장히 다양한 태그로 감싸진 것을 확인할 수 있다.
이렇게 11번 박스처럼 체이닝으로 접근 가능하다는 게 객체로 만듦으로써 얻은 장점이다.
위처럼 "..." 으로 나온 것 혹은 헐 여기서도 발견한 인코딩 엇나간 tofu 문자...😱 아무튼 이거는 실제로 사이트에서 잘려서 그런거다.
사이트에서도 위와 같이 ... 으로 잘려 나온 모습을 발견할 수 있다.
이렇게 하면 잘리지 않고 원하는 타이틀 정보 다 불러올 수 ㅇ.
위 예시는 h3 태그가 많고 여기서 뽑아오는 걸로 해결될 수 있는 사이트. 그러나 같은 태그가 많고 더 복잡한 웹 사이트라면 특정 태그로만 정보 갖고 오게 되면 상황에 따라 원치 않는 정보를 포함해 갖고오게될 수도 있음. 그런 경우를 대처하기 위해 html locator, id와 클래스에 대해서도 알아볼 필요 있.
태그는 고유한 속성을 갖는데 그 중에서도 id, class 는 locator란 이름으로 사용된다. id의 가장 큰 속성은 하나의 고유 태그를 보통 가리킨다. 즉 id는 특정 태그를 구분짓는 하나의 별명이다. 반면 클래스는 유사한 태그들을 묶을 때 사용한다!
주피터에 수록된 http://example.python-scraping.com/ 이 사이트 접속 안돼서 보여주면
이렇게 생김.
조금 깊게 있다. 그럼 이 요소를 어케 하면 잘 갖고 오나? 이를테면 얘네의 클래스랑 아이디는 각각 span12, results 인 것 보면 됨
이번엔 3번째 사이트 예시 hashcode. 검사 기능 기반으로 빠르게 구조 파악해보면
li 태그들 밑에 원하는 데이터 있는 것 발견 가능. 그리고 하나 집어 밑으로 파고 들어가 보면
h4 안에 제목 데이터 발견. 근데 앞서 클래스 특징에 대해 유사한 태그 묶는다. 동일한 디자인, 이벤트 등 적용하곤 하는데
클래스 값이 일관적인 걸 볼 수 있다. 저걸 사용할 거다.
기본적으로 h4 이하에 있어서 그렇게 갖고 와야 하는데, 실제로 보면 h4가 굉장히 많다.
이제 페이지네이션 돼있는 해시코드 사이트의 각 페이지를 1,2, .. 페이지로 넘어가면서 스크래핑 해올 예정. 근데 이걸 한 번에 요청을 보내면 서버에 한 번에 부하를 줘버리니 시간차를 두면서 요청 보내 보자. 또 페이지네이션 썼을 때 이걸 어케 구현하는지도 알아야 함. 대부분의 페이지네이션은 요청 URL 내 쿼리문으로 포함됨. 보통 이를 쿼리 스트링이라 함
그럼 더 심화. 동적 웹사이트인 경우와 셀레늄에 대해. 그걸 기반으로 지금까지 만든 스크래퍼들의 문제는뭔지 알아봄.
1. 비동기 처리 문제. 렌더링과 데이터 처리가 동시 이뤄지는 상황서 인터넷 연결이 불완전하다면?
2. UI 상호작용의 어려움: 데이터 렌더링 중에 키보드/마우스 입력을 requests 라이브러리 만으로 진행할 수 없
각 해결 방법
1. 렌더링 끝나면 오는 응답을 바로 처리하면 문제 없으나 임의 응답을 지연 처리하면 어케 되는가? 데이터가 다 오긴 했지만 렌더링이 아직 다 안된거라면, 그를 위한 시간을 벌어주면 되는 거다. 그러고 나서 정보 갖고 오게 되면 이젠 완전한 데이터를 받을 수 있기 때문에 파싱, 추가 작업 등 통해 원하는 데이터 갖고 올 것.
2. 이미 알고 있다 시피 키보드 마우스 입력 (웹에서 말하는 '이벤트')을 플밍으로 작업할 수 있다는 거. 근데 이건 응답 온 후의 이야기고, 응답 온 후에도 이런 요소에 적용해서 클릭할 수 있는 환경이 필요하다. = 웹 브라우저
지금까지는 웹 브라우저를 파썬으로 대체해오는 코드를 작성해 왔으나, 웹 브라우저를 쓰고 파썬으로 조작하면 어떨까란 아이디어를 얻을 수 있는 것. 이벤트 입력은? 셀레늄으로 할 수 있. 셀레늄이란 웹 브라우저를 자동화하는 라이브러리.
셀레늄 통해 브라우저에 명령 내리고, 예전 작업들 또한 진행할 수 있
강의자료 24쪽에 나온 elem.send_key의 send_key는 키보드 입력!
'Data > 데엔 데브코스 TIL' 카테고리의 다른 글
231027 금 Day9 - 크롤링5: 시각화(seaborn, wordcloud) (0) | 2023.10.27 |
---|---|
231026 목 Day8 - 크롤링4: 셀레늄 (0) | 2023.10.26 |
231024 화 Day6 - 크롤링2: http, 브라우저 (0) | 2023.10.24 |
231023 월 Day5 - 크롤링1: html css (0) | 2023.10.23 |
231019 목 Day4 (0) | 2023.10.19 |