반응형
유튜브의 부동산지인 크롤링 시리즈 중
미분양세대수 수집 프로그램의 최종코드입니다.
파이썬 소스코드
city_list = [
["1100000000", "1168000000"], # 서울특별시 강남구
["1100000000", "1174000000"], # 서울특별시 강동구
["1100000000", "1130500000"], # 서울특별시 강북구
["1100000000", "1150000000"], # 서울특별시 강서구
["1100000000", "1162000000"], # 서울특별시 관악구
["1100000000", "1121500000"], # 서울특별시 광진구
["1100000000", "1153000000"], # 서울특별시 구로구
["1100000000", "1154500000"], # 서울특별시 금천구
["1100000000", "1135000000"], # 서울특별시 노원구
["1100000000", "1132000000"], # 서울특별시 도봉구
["1100000000", "1123000000"], # 서울특별시 동대문구
["1100000000", "1159000000"], # 서울특별시 동작구
["1100000000", "1144000000"], # 서울특별시 마포구
["1100000000", "1141000000"], # 서울특별시 서대문구
["1100000000", "1165000000"], # 서울특별시 서초구
["1100000000", "1120000000"], # 서울특별시 성동구
["1100000000", "1129000000"], # 서울특별시 성북구
["1100000000", "1171000000"], # 서울특별시 송파구
["1100000000", "1147000000"], # 서울특별시 양천구
["1100000000", "1156000000"], # 서울특별시 영등포구
["1100000000", "1117000000"], # 서울특별시 용산구
["1100000000", "1138000000"], # 서울특별시 은평구
["1100000000", "1111000000"], # 서울특별시 종로구
["1100000000", "1114000000"], # 서울특별시 중구
["1100000000", "1126000000"], # 서울특별시 중랑구
["2600000000", "2644000000"], # 부산광역시 강서구
["2600000000", "2641000000"], # 부산광역시 금정구
["2600000000", "2671000000"], # 부산광역시 기장군
["2600000000", "2629000000"], # 부산광역시 남구
["2600000000", "2617000000"], # 부산광역시 동구
["2600000000", "2626000000"], # 부산광역시 동래구
["2600000000", "2623000000"], # 부산광역시 부산진구
["2600000000", "2632000000"], # 부산광역시 북구
["2600000000", "2653000000"], # 부산광역시 사상구
["2600000000", "2638000000"], # 부산광역시 사하구
["2600000000", "2614000000"], # 부산광역시 서구
["2600000000", "2650000000"], # 부산광역시 수영구
["2600000000", "2647000000"], # 부산광역시 연제구
["2600000000", "2620000000"], # 부산광역시 영도구
["2600000000", "2611000000"], # 부산광역시 중구
["2600000000", "2635000000"], # 부산광역시 해운대구
["2700000000", "2720000000"], # 대구광역시 남구
["2700000000", "2729000000"], # 대구광역시 달서구
["2700000000", "2771000000"], # 대구광역시 달성군
["2700000000", "2714000000"], # 대구광역시 동구
["2700000000", "2723000000"], # 대구광역시 북구
["2700000000", "2717000000"], # 대구광역시 서구
["2700000000", "2726000000"], # 대구광역시 수성구
["2700000000", "2711000000"], # 대구광역시 중구
["2800000000", "2871000000"], # 인천광역시 강화군
["2800000000", "2824500000"], # 인천광역시 계양구
["2800000000", "2820000000"], # 인천광역시 남동구
["2800000000", "2814000000"], # 인천광역시 동구
["2800000000", "2817700000"], # 인천광역시 미추홀구
["2800000000", "2823700000"], # 인천광역시 부평구
["2800000000", "2826000000"], # 인천광역시 서구
["2800000000", "2818500000"], # 인천광역시 연수구
["2800000000", "2872000000"], # 인천광역시 옹진군
["2800000000", "2811000000"], # 인천광역시 중구
["2900000000", "2920000000"], # 광주광역시 광산구
["2900000000", "2915500000"], # 광주광역시 남구
["2900000000", "2911000000"], # 광주광역시 동구
["2900000000", "2917000000"], # 광주광역시 북구
["2900000000", "2914000000"], # 광주광역시 서구
["3000000000", "3023000000"], # 대전광역시 대덕구
["3000000000", "3011000000"], # 대전광역시 동구
["3000000000", "3017000000"], # 대전광역시 서구
["3000000000", "3020000000"], # 대전광역시 유성구
["3000000000", "3014000000"], # 대전광역시 중구
["3100000000", "3114000000"], # 울산광역시 남구
["3100000000", "3117000000"], # 울산광역시 동구
["3100000000", "3120000000"], # 울산광역시 북구
["3100000000", "3171000000"], # 울산광역시 울주군
["3100000000", "3111000000"], # 울산광역시 중구
["3600000000", "3611000000"], # 세종특별자치시 세종시
["4100000000", "4182000000"], # 경기도 가평군
["4100000000", "4128000000"], # 경기도 고양시
["4100000000", "4129000000"], # 경기도 과천시
["4100000000", "4121000000"], # 경기도 광명시
["4100000000", "4161000000"], # 경기도 광주시
["4100000000", "4131000000"], # 경기도 구리시
["4100000000", "4141000000"], # 경기도 군포시
["4100000000", "4157000000"], # 경기도 김포시
["4100000000", "4136000000"], # 경기도 남양주시
["4100000000", "4125000000"], # 경기도 동두천시
["4100000000", "4119000000"], # 경기도 부천시
["4100000000", "4113000000"], # 경기도 성남시
["4100000000", "4111000000"], # 경기도 수원시
["4100000000", "4139000000"], # 경기도 시흥시
["4100000000", "4127000000"], # 경기도 안산시
["4100000000", "4155000000"], # 경기도 안성시
["4100000000", "4117000000"], # 경기도 안양시
["4100000000", "4163000000"], # 경기도 양주시
["4100000000", "4183000000"], # 경기도 양평군
["4100000000", "4167000000"], # 경기도 여주시
["4100000000", "4180000000"], # 경기도 연천군
["4100000000", "4137000000"], # 경기도 오산시
["4100000000", "4146000000"], # 경기도 용인시
["4100000000", "4143000000"], # 경기도 의왕시
["4100000000", "4115000000"], # 경기도 의정부시
["4100000000", "4150000000"], # 경기도 이천시
["4100000000", "4148000000"], # 경기도 파주시
["4100000000", "4122000000"], # 경기도 평택시
["4100000000", "4165000000"], # 경기도 포천시
["4100000000", "4145000000"], # 경기도 하남시
["4100000000", "4159000000"], # 경기도 화성시
["4200000000", "4215000000"], # 강원도 강릉시
["4200000000", "4282000000"], # 강원도 고성군
["4200000000", "4217000000"], # 강원도 동해시
["4200000000", "4223000000"], # 강원도 삼척시
["4200000000", "4221000000"], # 강원도 속초시
["4200000000", "4280000000"], # 강원도 양구군
["4200000000", "4283000000"], # 강원도 양양군
["4200000000", "4275000000"], # 강원도 영월군
["4200000000", "4213000000"], # 강원도 원주시
["4200000000", "4281000000"], # 강원도 인제군
["4200000000", "4277000000"], # 강원도 정선군
["4200000000", "4278000000"], # 강원도 철원군
["4200000000", "4211000000"], # 강원도 춘천시
["4200000000", "4219000000"], # 강원도 태백시
["4200000000", "4276000000"], # 강원도 평창군
["4200000000", "4272000000"], # 강원도 홍천군
["4200000000", "4279000000"], # 강원도 화천군
["4200000000", "4273000000"], # 강원도 횡성군
["4300000000", "4376000000"], # 충청북도 괴산군
["4300000000", "4380000000"], # 충청북도 단양군
["4300000000", "4372000000"], # 충청북도 보은군
["4300000000", "4374000000"], # 충청북도 영동군
["4300000000", "4373000000"], # 충청북도 옥천군
["4300000000", "4377000000"], # 충청북도 음성군
["4300000000", "4315000000"], # 충청북도 제천시
["4300000000", "4374500000"], # 충청북도 증평군
["4300000000", "4375000000"], # 충청북도 진천군
["4300000000", "4311000000"], # 충청북도 청주시
["4300000000", "4313000000"], # 충청북도 충주시
["4400000000", "4425000000"], # 충청남도 계룡시
["4400000000", "4415000000"], # 충청남도 공주시
["4400000000", "4471000000"], # 충청남도 금산군
["4400000000", "4423000000"], # 충청남도 논산시
["4400000000", "4427000000"], # 충청남도 당진시
["4400000000", "4418000000"], # 충청남도 보령시
["4400000000", "4476000000"], # 충청남도 부여군
["4400000000", "4421000000"], # 충청남도 서산시
["4400000000", "4477000000"], # 충청남도 서천군
["4400000000", "4420000000"], # 충청남도 아산시
["4400000000", "4481000000"], # 충청남도 예산군
["4400000000", "4413000000"], # 충청남도 천안시
["4400000000", "4479000000"], # 충청남도 청양군
["4400000000", "4482500000"], # 충청남도 태안군
["4400000000", "4480000000"], # 충청남도 홍성군
["4500000000", "4579000000"], # 전라북도 고창군
["4500000000", "4513000000"], # 전라북도 군산시
["4500000000", "4521000000"], # 전라북도 김제시
["4500000000", "4519000000"], # 전라북도 남원시
["4500000000", "4573000000"], # 전라북도 무주군
["4500000000", "4580000000"], # 전라북도 부안군
["4500000000", "4577000000"], # 전라북도 순창군
["4500000000", "4571000000"], # 전라북도 완주군
["4500000000", "4514000000"], # 전라북도 익산시
["4500000000", "4575000000"], # 전라북도 임실군
["4500000000", "4574000000"], # 전라북도 장수군
["4500000000", "4511000000"], # 전라북도 전주시
["4500000000", "4518000000"], # 전라북도 정읍시
["4500000000", "4572000000"], # 전라북도 진안군
["4600000000", "4681000000"], # 전라남도 강진군
["4600000000", "4677000000"], # 전라남도 고흥군
["4600000000", "4672000000"], # 전라남도 곡성군
["4600000000", "4623000000"], # 전라남도 광양시
["4600000000", "4673000000"], # 전라남도 구례군
["4600000000", "4617000000"], # 전라남도 나주시
["4600000000", "4671000000"], # 전라남도 담양군
["4600000000", "4611000000"], # 전라남도 목포시
["4600000000", "4684000000"], # 전라남도 무안군
["4600000000", "4678000000"], # 전라남도 보성군
["4600000000", "4615000000"], # 전라남도 순천시
["4600000000", "4691000000"], # 전라남도 신안군
["4600000000", "4613000000"], # 전라남도 여수시
["4600000000", "4687000000"], # 전라남도 영광군
["4600000000", "4683000000"], # 전라남도 영암군
["4600000000", "4689000000"], # 전라남도 완도군
["4600000000", "4688000000"], # 전라남도 장성군
["4600000000", "4680000000"], # 전라남도 장흥군
["4600000000", "4690000000"], # 전라남도 진도군
["4600000000", "4686000000"], # 전라남도 함평군
["4600000000", "4682000000"], # 전라남도 해남군
["4600000000", "4679000000"], # 전라남도 화순군
["4700000000", "4729000000"], # 경상북도 경산시
["4700000000", "4713000000"], # 경상북도 경주시
["4700000000", "4783000000"], # 경상북도 고령군
["4700000000", "4719000000"], # 경상북도 구미시
["4700000000", "4772000000"], # 경상북도 군위군
["4700000000", "4715000000"], # 경상북도 김천시
["4700000000", "4728000000"], # 경상북도 문경시
["4700000000", "4792000000"], # 경상북도 봉화군
["4700000000", "4725000000"], # 경상북도 상주시
["4700000000", "4784000000"], # 경상북도 성주군
["4700000000", "4717000000"], # 경상북도 안동시
["4700000000", "4777000000"], # 경상북도 영덕군
["4700000000", "4776000000"], # 경상북도 영양군
["4700000000", "4721000000"], # 경상북도 영주시
["4700000000", "4723000000"], # 경상북도 영천시
["4700000000", "4790000000"], # 경상북도 예천군
["4700000000", "4794000000"], # 경상북도 울릉군
["4700000000", "4793000000"], # 경상북도 울진군
["4700000000", "4773000000"], # 경상북도 의성군
["4700000000", "4782000000"], # 경상북도 청도군
["4700000000", "4775000000"], # 경상북도 청송군
["4700000000", "4785000000"], # 경상북도 칠곡군
["4700000000", "4711000000"], # 경상북도 포항시
["4800000000", "4831000000"], # 경상남도 거제시
["4800000000", "4888000000"], # 경상남도 거창군
["4800000000", "4882000000"], # 경상남도 고성군
["4800000000", "4825000000"], # 경상남도 김해시
["4800000000", "4884000000"], # 경상남도 남해군
["4800000000", "4827000000"], # 경상남도 밀양시
["4800000000", "4824000000"], # 경상남도 사천시
["4800000000", "4886000000"], # 경상남도 산청군
["4800000000", "4833000000"], # 경상남도 양산시
["4800000000", "4872000000"], # 경상남도 의령군
["4800000000", "4817000000"], # 경상남도 진주시
["4800000000", "4874000000"], # 경상남도 창녕군
["4800000000", "4812000000"], # 경상남도 창원시
["4800000000", "4822000000"], # 경상남도 통영시
["4800000000", "4885000000"], # 경상남도 하동군
["4800000000", "4873000000"], # 경상남도 함안군
["4800000000", "4887000000"], # 경상남도 함양군
["4800000000", "4889000000"], # 경상남도 합천군
["5000000000", "5013000000"], # 제주특별자치도 서귀포시
["5000000000", "5011000000"], # 제주특별자치도 제주시
]
from time import sleep
import chromedriver_autoinstaller
import pandas as pd
from selenium import webdriver
from selenium.common import UnexpectedAlertPresentException, NoAlertPresentException
from selenium.webdriver import ActionChains as ac
from selenium.webdriver.common.by import By
chromedriver_autoinstaller.install()
driver = webdriver.Chrome()
driver.implicitly_wait(5)
driver.maximize_window()
driver.get("https://www.aptgin.com/homeLogin")
driver.find_element(By.ID, "user_id1").send_keys("여러분의아이디")
driver.find_element(By.ID, "password1").send_keys("여러분의암호")
driver.find_element(By.CSS_SELECTOR, "button.btn.btn-primary.logbtn").click()
sleep(1)
try:
driver.switch_to.alert.accept()
except [UnexpectedAlertPresentException, NoAlertPresentException]:
pass
driver.get("https://www.aptgin.com/home/gin04/gin0403")
for i, j in city_list:
driver.find_element(By.ID, "regionTxt").click()
driver.find_element(By.CSS_SELECTOR, f'button[data-code="{i}"]').click()
driver.find_element(By.CSS_SELECTOR, f'button[data-code="{j}"]').click()
# 검색버튼 클릭
driver.find_element(By.CSS_SELECTOR, "button.btn-submit").click()
# 엑셀파일 이름 정하기 : 차트 제목에서 추출
sleep(1)
filename = driver.find_element(By.CSS_SELECTOR, "text.highcharts-title > tspan").text
print(filename)
# 2010-01월 마우스를 갖다대고 데이터 취득
# hover
elem = driver.find_element(By.CSS_SELECTOR, "path.highcharts-graph")
ac(driver).move_to_element(elem).move_by_offset(xoffset=-544, yoffset=-10).perform()
# driver.execute_script("window.scrollBy(0, 100);")
미분양리스트 = []
data = driver.find_elements(By.CSS_SELECTOR, 'text[style="font-size:12px;color:#333333;cursor:default;fill:#333333;"]')
연월 = data[0].text
미분양_전체 = data[1].text.replace("● 미분양(전체): ", "")
미분양_준공후 = data[2].text.replace("● 미분양(준공후): ", "")
# 데이터dict를 "list"에 추가
미분양리스트.append({"연월": 연월, "전체": 미분양_전체, "준공후": 미분양_준공후})
# 아주 조금 오른쪽으로 옮기기를 반복하면서
while True:
ac(driver).move_by_offset(xoffset=6, yoffset=0).perform()
data = driver.find_elements(By.CSS_SELECTOR,
'text[style="font-size:12px;color:#333333;cursor:default;fill:#333333;"]')
연월 = data[0].text
미분양_전체 = data[1].text.replace("● 미분양(전체): ", "")
try:
미분양_준공후 = data[2].text.replace("● 미분양(준공후): ", "")
except IndexError:
미분양_준공후 = 0
미분양리스트.append({"연월": 연월, "전체": 미분양_전체, "준공후": 미분양_준공후})
print(연월, 미분양_전체, 미분양_준공후)
if not 연월:
break
# 데이터프레임 생성
df = pd.DataFrame(미분양리스트[:-1])
# 중복 제거
df = df.drop_duplicates()
# 데이터프레임 엑셀저장(파일명은 차트제목)
df.to_excel(f"{filename}.xlsx")
driver.quit()
질문은 유튜브나 블로그에 댓글로 남겨주세요.
행복한 하루 되세요!!!ㅋ
반응형
댓글