• 카테고리

    질문 & 답변
  • 세부 분야

    업무 자동화

  • 해결 여부

    미해결

json으로는 데이터를 가져올 수 있는데 requests select로 찾을 수 없는경우는?

21.06.17 11:57 작성 조회수 93

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 등을 이용해서 추출할 수도 잇습니다.