일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- TF-IDF
- 파이썬
- 데이터 엔지니어링
- 딥러닝
- 코딩테스트
- selenium
- wordcloud
- 웹크롤링
- Cosine-similarity
- SGD
- 백준
- Overfitting
- codingtest
- coursera
- pytorch
- 머신러닝
- 알고리즘
- 분산 시스템
- 프로그래머스
- 부스트캠프
- Tensor
- recommendation system
- 협업 필터링
- 웹스크래핑
- Python
- 데이터
- 추천시스템
- 시각화
- 추천 시스템
- 코테
- Today
- Total
개발자식
[크롤링] Post request 기반의 웹사이트 크롤링 본문
서울상권분석서비스 사이트를 이용하여 post request 기반의 웹사이트를 크롤링해보자.
https://golmok.seoul.go.kr/regionAreaAnalysis.do
우리마을가게 상권분석 서비스
제공정보 안내 업종과밀도 정의 : 사업체가 시장균형을 이룰 수 있는 적정한 정도를 넘어서 한 상권에 밀집하여 분포한 정도 구축내용 • 알고리즘 : 2013 - 2017년 상권정보 데이터를 활용한 GMM 모
golmok.seoul.go.kr
1. 웹 크롤링
import json
import requests
from bs4 import BeautifulSoup
url = 'https://golmok.seoul.go.kr/regionAreaAnalysis.do'
response = requests.get(url).content
web_page = BeautifulSoup(response, 'html.parser')
web_page
-> web_page를 보면 아래의 사진과 같은 임대시세 데이터를 불러올 수가 없다.
2. Post 요청 확인
크롬 개발자 도구에서 Network 탭을 선택한 후 (All에 체크하고) "검색" 버튼을 다시 클릭하여 요청을 catch 한다.
(Stauts 200 : 요청 잘됨)
위 사진과 같이 Headers를 보면 Request URL은 https://golmok.seoul.go.kr/region/selectRentalPrice.json 이고, Request Method가 Post임을 알 수 있다.
+ Post 요청임을 알 수 있는 사실 중 하나는 검색을 눌렀을 때 (Get 요청과 달리) url이 변하지 않는다는 것이다.
post 요청 시 함께 제출해야 할 Form data 구성을 확인한다.
3. POST 요청 후 돌아온 데이터 처리
Form data를 포함하여 URL과 함께 POST 요청 후 돌아온 데이터를 처리한다.
data = {'stdrYyCd': '2021', 'stdrQuCd': '4', 'stdrSlctQu': 'sameQu', 'svcIndutyCdL': 'CS000000', 'svcIndutyCdM': 'all'}
response = requests.post('https://golmok.seoul.go.kr/region/selectRentalPrice.json', data=data).content
post 요청 : BODY에 데이터를 key-value 형식으로 넣어서 전송한다.
response는 json형태로 받아와 josn.loads()를 이용하여 읽는다.
result = json.loads(response)
result
결과 :
[{'GBN_CD': '11',
'NM': '서울시 전체',
'GUBUN': 'si',
'BF1_FST_FLOOR': '134566',
'BF2_FST_FLOOR': '140213',
'BF3_FST_FLOOR': '146518',
'BF1_EX_FLOOR': '104237',
'BF2_EX_FLOOR': '104417',
'BF3_EX_FLOOR': '111382',
'BF1_TOT_FLOOR': '119697',
'BF2_TOT_FLOOR': '122006',
'BF3_TOT_FLOOR': '128541'},
{'GBN_CD': '11110',
'NM': '종로구',
'GUBUN': 'gu',
'BF1_FST_FLOOR': '223413',
'BF2_FST_FLOOR': '199091',
'BF3_FST_FLOOR': '210992',
'BF1_EX_FLOOR': '153447',
'BF2_EX_FLOOR': '134928',
'BF3_EX_FLOOR': '144030',
'BF1_TOT_FLOOR': '185536',
'BF2_TOT_FLOOR': '165259',
'BF3_TOT_FLOOR': '175984'},
{'GBN_CD': '11110515',
'NM': '청운효자동',
'GUBUN': 'dong',
'BF1_FST_FLOOR': '162427',
'BF2_FST_FLOOR': '150627',
'BF3_FST_FLOOR': '182188',
'BF1_EX_FLOOR': '88321',
'BF2_EX_FLOOR': '96136',
'BF3_EX_FLOOR': '82669',
'BF1_TOT_FLOOR': '130207',
'BF2_TOT_FLOOR': '132645',
'BF3_TOT_FLOOR': '141341'},
{'GBN_CD': '11110530',
...
생략
}]
result를 이용하여 데이터 분석을 할 수 있다.
- 서울특별시 2021년 4분기 환산 임대료 전체 (단위: 3.3㎡당 월환산임대료, 원)을 뽑아보자
temp_data = []
for item in result:
temp_data.append(item['BF3_TOT_FLOOR'])
'Data > Python' 카테고리의 다른 글
[크롤링] 웹 크롤링, 네이버 금융TOP (0) | 2022.03.30 |
---|---|
[크롤링] 무한 스크롤 웹 스크래핑(Selenium) (0) | 2022.03.30 |
[크롤링] BeautifulSoup, Wadis 마감 상품 재고 체크 & 메일 발송 크롤링 (0) | 2022.03.30 |
[크롤링] Selenium_파파고 (1) | 2022.03.29 |
[크롤링] Selenium_구글 번역기 (0) | 2022.03.29 |