작성
·
147
0
마지막 수업까지 잘 들었습니다. 이것을 어떻게 활용할지는 제 역량인것 같네요.
제목과 같이 json 형식으로 데이터는 가져올 수 있는데
select로 찾을려고 하면 찾을 수 없습니다.
iframe 구조인것 같은데 주소를 어떻게 찾아야 할 지 모르겠습니다.
제가 가져올려고 하는 데이터는 다음과 같습니다.
'다방'이라는 부동산 정보 사이트고요
이중 특정 '공인중개사' url로 들어갑니다.
https://www.dabangapp.com/room/6098cb714ea1405f11888d94
이중 room 뒤에 있는 6998~~~이 중개사 고유번호 입니다.
이 사이트에서 특정 방의 데이터를 가져올려고 하면 직접을 가져올 수 없고 개발자도구, 네트워크에서 request url을 통하여 json으로 받아올 수는 있습니다.
그런데 res.text 문구를 살펴보면 찾고자 하는 단어 들은 있는것 같은데
soup.select('div') 이런 명령어를 실행하면 빈 리스트만 나옵니다.
어떻게 하면 select로 찾을 수 있을까요?
참고로 첨부 아래는 제가 구현한 코드입니다.
agent = {
'좋은방다나와' : '5c7618ea1ffadb68b5da64e3',
'스마트' : '586f674024a93357d00dbcbd',
'조은' : '56a194f7ef02fd5dad87063f',
'런' : '581976532553ed2bee2d785e'
}
for item in agent.items():
id_list = []
for page in range(1,10):
url = 'https://www.dabangapp.com/api/3/room/list/agent?api_version=3.0.1&call_type=web&id={}&page={}&version=1'.format(item[1], page)
res = requests.get(url)
data_dict = res.json()
for data in data_dict['rooms']:
if len(data_dict['rooms']) == 0:
break
else:
each_id = data['id']
id_list.append(each_id)
time.sleep(1)
columns = ['유형', '전월세', '보증금', '월세', '면적', '관리비', '확정일', '층', '전체층', '방수', '욕실수', '난방', '빌트인', '주차수', '승강기', '애완동물', '발코니', '입주가능일', '타이틀', '메모', '주소']
total_room_inform_list = []
for id in id_list:
url1 = 'https://www.dabangapp.com/api/3/room/detail2?api_version=3.0.1&call_type=web&room_id={}&version=1'.format(id)
res1 = requests.get(url1)
room_inform = res1.json()['room']
room_inform_list = []
room_inform_list.append(room_inform['room_type_str'])
if room_inform['price_info'][0][2] == 0:
room_inform['price_info'][0][2] = '월세'
elif room_inform['price_info'][0][2] == 1:
room_inform['price_info'][0][2] = '전세'
room_inform_list.append(room_inform['price_info'][0][2])
room_inform_list.append(room_inform['price_info'][0][0])
room_inform_list.append(room_inform['price_info'][0][1])
room_inform_list.append(room_inform['room_size'])
room_inform_list.append(room_inform['maintenance_cost_str'])
room_inform_list.append(room_inform['confirm_date_str'])
room_inform_list.append(room_inform['room_floor_str'])
room_inform_list.append(room_inform['building_floor_str'])
room_inform_list.append(room_inform['beds_num'])
room_inform_list.append(room_inform['bath_num'])
room_inform_list.append(room_inform['heating'])
room_inform_list.append(room_inform['built_in_str'])
room_inform_list.append(room_inform['parking_num'])
room_inform_list.append(room_inform['elevator_str'])
room_inform_list.append(room_inform['animal_str'])
room_inform_list.append(room_inform['balcony_str'])
room_inform_list.append(room_inform['moving_date'])
room_inform_list.append(room_inform['title'])
room_inform_list.append(room_inform['memo'].replace('\n', ' ').replace(',', ' '))
room_inform_list.append(room_inform['full_jibun_address2_str'])
total_room_inform_list.append(room_inform_list)
time.sleep(1)
df = pd.DataFrame(total_room_inform_list, columns=columns)
df = df.set_index('주소')
filename = item[0] + '_' + time.strftime('%Y%m%d') + '.xlsx'
df.to_excel(filename)
time.sleep(1)
/www.dabangapp.com/api/3/room/detail2?api_version=3.0.1&call_type=web&room_id=6098cb714ea1405f11888d94&version=1
https://www.dabangapp.com/api/3/room/detail2?api_version=3.0.1&call_type=web&room_id=6098cb714ea1405f11888d94&version=1
https://www.dabangapp.com/api/3/room/detail2?api_version=3.0.1&call_type=web&room_id=6098cb714ea1405f11888d94&version=1
https://www.dabangapp.com/api/3/room/detail2?api_version=3.0.1&call_type=web&room_id=6098cb714ea1405f11888d94&version=1
답변 1
0
"soup을 만들 때, `features` option을 다르게 줘보기" 방식을 시도해볼만 할 것 같은데, 만약 이것도 안된다면, 왠지 complete html form이 아니라서 그런 것일 수도 있을 것 같네요. 이런 경우 regular expression 등을 이용해서 추출할 수도 잇습니다.