inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

내 업무를 대신 할 파이썬(Python) 웹크롤링 & 자동화 (feat. 주식, 부동산 데이터 / 인스타그램)

17.1 Wrap-up

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

177

sangyun0314

작성한 질문수 5

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

python 웹-크롤링

답변 1

0

DeepingSauce

"soup을 만들 때, `features` option을 다르게 줘보기" 방식을 시도해볼만 할 것 같은데, 만약 이것도 안된다면, 왠지 complete html form이 아니라서 그런 것일 수도 있을 것 같네요. 이런 경우 regular expression 등을 이용해서 추출할 수도 잇습니다.

15.1 네이버 부동산 사이트 개발자도구 실행시 현상 문의

0

897

1

requirments 설치 시 오류

0

96

1

6.1 미국주식 데이터 크롤링이 막혔네요.

0

227

2

태그를 못찾는 오류 질문드립니다.

0

144

2

6.1 미국 주식 데이터 크롤링을 막아둔 거 같아요.

0

284

2

requirements.txt 다운로드가 안끝나요

0

149

2

주신 파일로 다운로드를 하던 중에 끝에 이런 오류가 뜨는데 어떡해야하나요?

0

150

1

혹시 애플 M시리즈 사용하시는 분 중에 오류

0

152

0

전일비 상승,하락때문에 int화를 못하고 있는데

0

127

1

일별 시세 데이터 상승/하락 \t\n해결법

0

159

1

pd.concat(df, ignore_index=True) InvalidIndexError 해결 방법 문의

0

469

2

pip install -r requirements.txt 문제

0

366

3

부동산 KB 시세 크롤링 문의

0

828

1

7.1 주식 일별 시세 데이터(Yahoo finance)

1

379

1

네이버 부동산 매물 크롤링 오류

0

645

1

네이버 부동산 크롤링 문의드립니다.

0

1059

1

버전 관련 질문

0

352

1

5.2강 주식 일별 시세 데이터 관련 질문이 있습니다

0

279

1

7.1 야후 파이낸스 크롤링 request 오류

0

741

1

anaconda

0

358

1

야후파이낸스 크롤링 오류

0

824

1

셀레니움 변경점

2

791

1

request.get() 하면 SSLCertVerificationError 에러가 납니다.

0

520

1

이론 수업 자료 공유 해주실 수 있나요?

0

362

0