본문 바로가기
코딩 연습/파이썬 크롤링

서울시 집수리닷컴 시공업체 추출 파이썬 크롤링 연습

by good4me 2023. 5. 14.

goodthings4me.tistory.com

서울시 집수리닷컴은 주거환경 개선을 위한 집수리 비용 보조 사업을 홍보하고 운영하는 웹 사이트인데, 이 사이트에 등록된 집수리 시공업체를 보면, 400여 개 시공업체들이 등록되어있다. 이 업체들을 파이썬 크롤링을 통해 추출하는 연습을 해봤다.

 

 

집수리 시공업체 정보 추출해보기

서울시 집수리닷컴
서울시 집수리닷컴

 집수리닷컴 시공 지원을 위해 등록한 시공 업체 추출 리스트 >>

 

[파이썬 소스 코드]

import requests
from bs4 import BeautifulSoup


url = 'https://jibsuri.seoul.go.kr/repair/entInfo/entList.do?pageIndex=1&sggCode=&cnstrctCode=05'

header = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'
} 

response = requests.get(url, headers=header)
soup = BeautifulSoup(response.text, 'html.parser')

table = soup.find('table', class_='tb_st03')
trs = table.select('tbody > tr')

ext_data = []
sigong = {'01':'방수공사', '02':'목공사', '03':'금속공사', '04':'지붕 및 홈통공사', '05':'창호 및 유리공사', '06':'타일공사', '07':'도장공사', '08':'단열공사', '09':'수장공사(도배,마감공사)', '10':'급배수위생설비공사', '11':'난방설비공사(보일러)', '12':'전기(배관/배선)공사', '13':'조명공사', '14':'기타'}
for tr in trs:
    ext = []
    for n, td in enumerate(tr.find_all('td')):
        if n == 0:
            no = td.text.strip()  # '\n\r\n\t\t\t\t\t\t\t\t\t217\r\n\t\t\t\t\t\t\t\t'
            ext.append(no)        
        if n == 1:
            company = td.text
            ext.append(company)
        if n == 2:
            biz_num = td.text
            ext.append(biz_num)
        if n == 3:
            ceo = td.text
            ext.append(ceo)
        if n == 4:
            categotype = td.text
            ext.append(categotype)
        if n == 5:
            # classify = td.text
            # 추출이 안되어서 보니, 개발자도구에서는 안 보이는 코드가 있음. 페이지 소스보기에서 보면 hidden input 있음
            classify = td.select_one('td > input')['value'].split(',')
            classify2 = ''
            for n, si in enumerate(classify, 1):
                if si in sigong.keys():
                    # print(sigong[si])
                    if n < len(classify):
                        classify2 += sigong[si] + ', '
                    else:
                        classify2 += sigong[si]
            ext.append(classify2)
        if n == 6:
            addr = td.text
            ext.append(addr)
    ext_data.append(ext)

print(ext_data)

 

  • 위 코드는 시공분야를 '창호 및 유리공사'로 선택한 상태에서 1페이지의 리스트를 추출하는 코드임
  • URL을 살펴보면, https://jibsuri.seoul.go.kr/repair/entInfo/entList.do?pageIndex=1&sggCode=&cnstrctCode=05 
  • pageindex=1이기 때문에 전체 페이지로 순환하면서 추출하려면 이 숫자를 변경하면 되고,
  • 시공분야는 총 14개로 '01' ~ '14'까지임을 소스 코드 및 자바스크립트 코드에서 확인함
  • 크롤링 추출 코드에서 보면, 이 사이트는 headers가 있어야 접근이 가능했으며,
  • 특이한 점은 시공분야(td index 5번째)의 경우, 추출이 안 되어서 확인해보니 개발자도구에서는 보이지 않고 페이지소스보기에서만 <input type="hidden" name="main_cnstrct_fld" value = "05,09"> 처럼 hidden 타입이 보이고 값이 시공분야의 value 값인 '01'~'14' 형식으로 되어있어서 추출 후에 sigong dict 값으로 치환하여 표시를 해야만 했음

페이지 순환 함수(전체 페이지 추출)로 만든 코드 보기

 

서울시 집수리닷컴 집수리 업체 정보 추출 - IT잇수

서울시 집수리닷컴 웹사이트는 서울 시민 중에서 집수리 지원 조건에 해당하는 저소득 가구의 집수리 공사를 돕기 위한 정책이며, 이 지원 정책을 수행하기 위한 시공업체들의 목록을 제공하는

itssu.kr

 

sponsered link

 

[실행 결과]

[['217', '여자만협동조합', '181-81-00860', '유정은', '건설업', '창호 및 유리공사, 수장공사(도배,마감공사)', '서울특별시 은평구 은평로 245 사회적경제허브센터 3층'], 
['216', '다움디자인', '619-02-40756', '정은화', '건설업,  서비스', '방수공사, 창호 및 유리공사, 타일공사, 단열공사, 난방설비공사(보 일러)', '서울특별시 서초구 방배선행길 8 상가동 201호'], 
['215', '이레나', '314-62-00440', '최에스더', '가구제조업, 실내장식사업', '방수공사, 목공사, 창호 및 유리공사, 타일공사, 도장공사, 단열공사, 수장공사(도배,마감공사), 난방설비공사(보일러), 전기(배관/배선)공사, 기타', '경기도 고양시 덕양구 고골길 108 제다동'], 
['214', '유한회사 한흥', '696-81-01584', '김한흥', '건 설업', '목공사, 금속공사, 창호 및 유리공사, 타일공사, 도장공사, 단열공사, 수장공사(도배,마감공사), 급배수위생설비공사, 전기(배관/배선)공사, 조명공사', '서울특별시 강서구 방화대로 294 513호'], 
['213', '아리별인테리어', '204-05-60060', '백종필', '인테리어', '방수공사, 목공사, 창호 및 유리공사, 단 열공사, 난방설비공사(보일러)', '서울특별시 금천구 독산로10길 12 101호'], 
['212', 'DH창호', '126-25-90904', '최지나', '플라스틱창호제조, 창호공사, 인테리어, 바닥재', '창호 및 유리공사', '경기도 하남시 춘궁로141번길 22-116 DH창호'], 
['211', '(주)일하는소리', '135-88-01638', '최용태', '실내건축, 인테리어, 폐기물처리, 일반건축공사', '방수공사, 창호 및 유리공사, 단열공사, 수장공사(도배,마감공사), 급배수위생설비공사', '서울특별시 마포구 월드컵로36길 14 1314호'], 
['210', '(주)셀핀랩', '741-87-02279', '박창영', '건축물  마무리 공사업', '방수공사, 목공사, 창호 및 유리공사, 타일공사, 도장공사,  단열공사, 수장공사(도배,마감공사), 난방설비공사(보일러), 전기(배관/배선)공사, 조명공사', '서울특별시 광진구 능동로 209 327호'], 
['209', '선민종합관 리', '683-02-02525', '정수민, 유희보', '건축물 일반 청소업, 시설관리, 인테리어, 간판, 전기설비, 공사, 매트리스, 카펫트, 유', '방수공사, 목공사, 창호 및 유리공사', '경기도 성남시 중원구 자혜로16번길 25-13 201호'], 
['208', '대신창호공사', '105-11-95910', '이명숙', '창호, 철물공사, 인테리어', '금속공사, 창호 및 유리공사', '서울특별시 은평구 은평로8길 16-3 401호']] 결과

 

댓글