개발자식

[크롤링] Post request 기반의 웹사이트 크롤링 본문

Data/Python

[크롤링] Post request 기반의 웹사이트 크롤링

밍츠 2022. 3. 30. 00:59

서울상권분석서비스 사이트를 이용하여 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'])
Comments