본문 바로가기

프로그래밍/크롤링(PYTHON)

[190119] requests In Python

반응형

BeautifulSoup를 이용해서 원하는 데이터를 긁어올 수 있는 것은 참 멋진데, 보통 내가 원하는 양질의 데이터들은 단순히 HTML에 툭툭 나열되어있는 것이 아니라, 특정 카테고리를 선택해야 한다던가, 특정 키워드를 검색해서 양질의 데이터를 제공한다. 그 말인 즉, 스크래이퍼가 마치 사람인양 요청을 해야한다는 것이다.

예를 들어서, 주택청약정보를 담고있는 아파트투유 홈페이지 ("https://www.apt2you.com/") 에는 보통 사람들이 많이 관심을 갖는 주택분양 경쟁률이나 결과가 업로드된다.

여러가지 필터링을 통해서 원하는 지역의 주택을 검색하고 해당 주택의 청약 경쟁률이나 공급현황, 이미 공고가 끝났다면 평균 가점, 최저/고 가점 등을 참고할 수 있다. 한마디로, 원하는 지역의 정보를 스크래이핑 하고 싶으면 이 페이지에 요청해야만한다. 페이지를 조금 뒤적거리다보면, https://www.apt2you.com/houseSaleSimpleInfo.do, 즉, houseSaleSimpleInfo.do 를 찾을 수 있는데 해당 코드 안에는 다음과 같은 스크립트가 있다.


  


경쟁률

 
   


showCompetitiveDetailInfo로 특정 숫자를 파라미터로 넘겨주는데 showCompetitiveDetailInfo의 내용은

  
function showCompetitiveDetailInfo(manageNo) {
		
		$.ajax({
			url: "/competitiveDetailInfo.do",
			type: "POST",
			dataType: "html",
			data: {manageNo: manageNo},
			async: false,
			success : function(html){
				$("#layComp").html(html);
			},
			error: function() {
				$("#layComp").html('

청약접수 경쟁률

' + '
' + '

[오류] 다시 조회하시기 바랍니다.

'); } }); //해당건설지역 text show,hide $(".btn_toggle").on("click",function(){ $(".txt_sh").toggle(); }); }  


이러하다. 뭔가 많지만 결국 내용은 POST로 data를 {manageNo : manageNo(예를 들면 201800012과 같은)}와 같은 꼴로 competitiveDetailto.do에 넘겨준다는 것이다. 그러면 이를 흉내만 내면 우리는 같은 결과를 받아볼 수 있다.

  
import requests

params = {'manageNo' : 2018001328}

r = requests.post("https://www.apt2you.com/competitiveDetailInfo.do", data=params)

print(r.text)
 


이렇게 간단한 4줄 코딩으로 다음과 같이 결과를 얻을 수 있다. 경쟁률에 관한 수치가 담겨있는 페이지다.

  
		
	

청약접수 경쟁률

금곡역 디에브스(남양주) 

청약접수 결과 입주자 모집공고에 명시한 일반공급 가구수 및 예비입주자선정 가구 수에 미달 시 후순위 청약접수를 받습니다.

...생략...  


현재 캡처가 잘 안돼서... 추후에 다시 수정해서 올려야겠다.



반응형