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 받은 값을 데이터프레임 형태로 출력
+ 데이터프레임 형태로 출력할때, 검색한 방에 해당하는 곳만 출력하도록 함
+ 필요한 열만 추출
처음으로 모듈을 만들어봐서,, 싱기
댓글
댓글 쓰기