KT 에이블스쿨 :: 데이터 수집 - 정적 페이지 크롤링
크롤링 원리
client가 server에게 내가 원하는 정보를 달라고 url을 주며 request 하면
server는 client에게 정보를 json, html, pdf 등 다양한 형태로 response해주는 것
크롤링은 사람대신 파이썬 크롤링 봇이 자동으로 request 한 뒤, response한 데이터를 보여주는 것
1. client에서 url을 get / post 방식으로 server 에게 request
2. server는 request 받은 정보를 response 해서 client에게 전달
3. response 받은 정보를 parsing (html, pdf, img, json 형식으로 된 데이터를 받아서 화면에 출력하는것) 해서 출력
request 방식
- get 방식 : URL에 쿼리가 포함 - 쿼리(데이터) 노출됨, 전송 가능 데이터 작음
response = request.get(url, headers = headers)- post 방식 : body에 쿼리가 포함 - 쿼리(데이터) 비노출, 전송 가능 데이터 많음
post 방식은 body에 쿼리를 넣어서, params 변수를 만들어서 post 파라미터로 같이 줘야함
response = request.post(url, params)response 상태 코드
2xx : 성공 (크롤링 가능)
3xx : 리다이렉션 (크롤링 가능)
4xx : 요청 에러 (서버에서 막은경우나, 내가 코드를 잘 못쓴 경우 등)
5xx : 서버 에러
크롤링이 막힌 경우
- 홈페이지 마다 다르지만 서버에서 크롤링 수집을 막은 경우가 있음.
그럴때는 headers의 user-agent, referer, cookies 정보를 파이썬 코딩으로 변경해야한다.
1. user - agent : 헤더에서 자신이 누구인지 밝히는 부분. 파이썬 크롤링 봇이 아니라, 나는 윈도우 브라우저에서 들어가는거라고 미리 설정해야함
2. referer : 크롤링 수집할 웹사이트가 도착지라고 하면, 출발지를 나타내는 부분.
파이썬 크롤링 봇으로 수집하면, referer 부분이 비어있음.
그래서 미리 해당 홈페이지의 url로 설정하면 됨
3. cookies : 임시적으로 ram에 저장되는 정보. 로그인이 필요한 경우에는 쿠키에 있는 로그인 (id, password) 정보를 확인함
로그인 한 뒤에 크롤링을 하는 사이트인 경우에는 쿠키도 미리 설정해야한다.
but, 로그인이 필요없는 경우에는 대부분 user-agent, referer 부분 만으로도 해결 가능
정적 vs 동적 페이지
홈페이지가 정적인지 동적 페이지인지는 크롬 개발자 도구(F12)를 봐야지만 확인 가능
정보를 요청한 뒤 응답이 왔을때, 정적 / 동적의 차이는
1. 페이지 url이 변하는지 안변하는지 (새로고침되는지)
2. 응답의 형태 - html ? json ? 등
- 정적 페이지 : 웹 브라우져에 화면이 한번 뜨면 이벤트에 의한 화면의 변경이 없는 페이지
정적페이지는 이미 만들어 둔 html페이지를 반환합니다.
1. 메인홈피에서 뭔가를 클릭했을때 페이지(+url)가 안 바뀌고 정보가 추가되는 것
2. 응답을 주로 json으로 받아서 파싱 , list, dict 형태로 되어있어서 파싱이 쉬움
![]() |
| 응답 받은 텍스트를 출력한 예시 |
- 동적 페이지
동적페이지는 클라이언트의 요청에 따라 db등과 상호작용하여 동적으로 컨텐츠를 생성합니다.
이에 대한 응답으로 html, json, xml등 다양한 형식의 데이터를 반환할 수 있습니다.
1. 메인홈피에서 뭔가를 클릭했을때 페이지가 바뀌면서 URL도 바뀌는것
웹 브라우져에 화면이 뜨고 이벤트가 발생하면 서버에서 데이터를 가져와 화면을 변경하는 페이지
2. 홈페이지가 html 태그로 되어있어서, 요청을 보낼때도 받을때도 주로 html 임.
html 계층적 구조로 되어있어서 파싱이 비교적 어려움
| 마트 웹페이지의 html |
정적 페이지
1. 네이버 증권 페이지
- kospi, kosdaq, us dollar 수집
- 데이터 스케일링 후 시각화
- 3개의 지수 상관관계 분석
2. 다음 환율페이지
- 서버에서 크롤링봇을 막은 경우, 어떻게 크롤링 할지
-> headers의 user-agent, referer, cookie 정보를 파이썬으로 수정해야함
3. REST API : 카카오 KoGPT
- kakao developer 사이트에서 rest api 키 값을 등록
- koGPT의 api를 사용해서 "주어진 문장의 다음 내용 생성" 기능 사용
- 참고 사이트
kogpt : https://developers.kakao.com/docs/latest/ko/kogpt/common
개발 문서 : https://developers.kakao.com/docs/latest/ko/kogpt/rest-api
4. REST API : 네이버 API
- 통합검색어 트렌드 API
- 검색어 트렌드가 어떻게 되는지 파이썬에서 확인
- 참고 사이트
네이버 개발 : https://developers.naver.com/
데이터랩 : https://datalab.naver.com/
검색어 트랜드 : https://datalab.naver.com/keyword/trendSearch.naver
검색어 트렌드 API : https://developers.naver.com/docs/serviceapi/datalab/search/search.md#통합-검색어-트랜드-api-레퍼런스
5. geohash 라이브러리 : 직방
- 1. 동이름 검색하고 위도, 경도 구하기
- 2-1. 검색한 동의 geohash 값 받아옴
- 2-2. geohash2 라이브러리를 import해서 encode- 2-3. 받은 geohash 값으로 해당 동 근처의 매물 방 출력
- 3. 방 id 를 뽑아서 방을 보여주는 url에 정보를 post방식으로 전달
* post 방식이기때문에, params 값으로 domain, item_ids 필요
* get 방식은 url에 추가됨
- 4. response 받은 값을 데이터프레임 형태로 출력
+ 데이터프레임 형태로 출력할때, 검색한 방에 해당하는 곳만 출력하도록 함
+ 필요한 열만 추출
처음으로 모듈을 만들어봐서,, 싱기


댓글
댓글 쓰기