본문으로 바로가기

HTML 요청을 보낼 때 방법은 총 7가지가 있습니다. 그 중 가장 많이 쓰이는 것은 아래 4가지 방법입니다.

1) get : 서버에서 데이터를 가져와라
2) post : 게시물 올리고 데이터를 제출하면서 조치를 해달라고 할 때
    - 대표적인 예시; 회원가입, 로그인, ...
3) put : 수정
4) delete : 삭제

 

 

이번 시간에는 이 중에서 Post Request 기반 크롤링을 하는 방법을 배워보았습니다.

Post 요청의 대표적인 예시엔 회원가입, 로그인이 있습니다.

다음과 같은 상황이라면 Post 요청을 의심해볼 수 있습니다.

 

1. 특정 버튼을 클릭해서 화면이 넘어갔는데도 URL이 안변한다 ? -> Post 요청 의심
2. 개발자 도구 -> Network -> Request Method가 Post인지 확인

 

3. Post 요청이 맞다면, Form data (또는 Headers 탭 옆의 Payload 탭)에서 Form data 구성 확인 및 복사

4. Form data를 포함하여 URL과 함께 Post 요청 후 돌아온 데이터 처리

(get 함수와 요청 형태가 많이 다르기에 주의해야한다.)

 


Post 요청의 특징

[get 요청과 비교해보기]

web = requests.get(url).content

source = BeautifulSoup(web, 'html.parser')

 

[post 요청]

data={ }

response = requests.post(json_url, data)

result = response.loads(response)

 

# header가 아니라 data로 post 요청 보내기
# URL은 보여있는 부분에서 들고 오는 것이 아닌, 개발자 도구에서 Request URL을 들고와야한다
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

# HTML 해석하는 것은 BeautifulSoup지만,
# json 해석하는 것은 json.loads
result = json.loads(response)
result[0]

 

이후 부분은 다음과 같이 get 요청에서 데이터 처리하듯이 써주면 된다.

temp_data = []

for item in result:
    temp_data.append(item['BF3_TOT_FLOOR'])

temp_data