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 값으로 치환하여 표시를 해야만 했음
▶ 페이지 순환 함수(전체 페이지 추출)로 만든 코드 보기 ◀
[실행 결과]
[['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호']] 결과
'코딩 연습 > 파이썬 크롤링' 카테고리의 다른 글
크롬 드라이버 자동 설치, vs code로 selenium 실행해 보기 (0) | 2023.11.22 |
---|---|
[파이썬 크롤링 연습] 가정용 보일러 인증제품 목록 수집 (0) | 2023.11.08 |
구분자로 연결된 문자열의 일부분을 추출하는 방법 (0) | 2023.03.25 |
전원주택라이프 웹 사이트 크롤링 테스트 (0) | 2023.03.25 |
네이버 블로그 제목 리스트 추출해보기 (0) | 2022.08.23 |
댓글