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줄 코딩으로 다음과 같이 결과를 얻을 수 있다. 경쟁률에 관한 수치가 담겨있는 페이지다.
청약접수 경쟁률
금곡역 디에브스(남양주)
청약접수 결과 입주자 모집공고에 명시한 일반공급 가구수 및 예비입주자선정 가구 수에 미달 시 후순위 청약접수를 받습니다.
...생략...
현재 캡처가 잘 안돼서... 추후에 다시 수정해서 올려야겠다.
'프로그래밍 > 크롤링(PYTHON)' 카테고리의 다른 글
Bot Detection / 크롤러 차단 / 크롤러 우회 #3 (1) | 2019.03.17 |
---|---|
Bot Detection / 크롤러 차단 / 크롤러 우회 #2 (9) | 2019.03.14 |
Bot Detection / 크롤러 차단 / 크롤러 우회 #1 (2) | 2019.03.11 |
[190125] performance in selenium / 셀레니움에서 성능 향상과 관련하여 (4) | 2019.01.25 |
[190116] pytrend (0) | 2019.01.16 |