본문 바로가기
코딩 연습/코딩배우기

파이썬 크롤링(Crawling) 연습 - Daum에서 검색한 전화번호의 기본 정보 추출

by good4me 2020. 11. 1.

goodthings4me.tistory.com

 

■ Daum에서 검색한 전화번호의 기본 정보와 업체명에 링크된 place 페이지 URL을  추출하고 html로 생성하는 연습

import requests
from bs4 import BeautifulSoup


def get_bs_obj(url, headers = None, params = None):
    result = requests.get(url, headers = headers, params = params)
    soup = BeautifulSoup(result.content, 'html.parser')
    return soup


place_tels = ['033-633-1699', '054-734-1077', '055-962-5025', '055-286-2233']

print('<table style="width: 99%; border: 3px solid gray;">')  ## html table 생성 코드

for tel in place_tels:
    daum_search_url = 'https://search.daum.net/search'
    params = {
        'nil_suggest': 'btn',
        'w': 'tot',
        'DA': 'SBC',
        'q': tel
    }
    
    soup = get_bs_obj(daum_search_url, params = params)
    
    sub_link = soup.find('div', class_ = 'wrap_cont')

 

[ '033-633-1699' 번호에 대해 sub_link로 추출한 html 코드 예]

<div class="wrap_cont"> <a class="fn_tit" href="http://place.map.kakao.com/10491171"
        onclick='smartLog(this, "dc=GG2&amp;pg=1&amp;s=TO&amp;rc=1&amp;d=10491171&amp;r=1&amp;p=1", event);'
        target="_blank"> 석이네횟집 </a> <span class="txt_bar"></span> <span class="tit_sub">회</span>
    <div class="info_place"><span class="f_url">033-633-1699</span>
        <div class="desc_more"> <a class="link_more" href="javascript:;"
                onclick='smartLog(this, "dc=GG2&amp;pg=1&amp;s=TO&amp;rc=1&amp;d=10491171&amp;r=1&amp;p=33&amp;at=func", event);'>
                강원 고성군 토성면 토성로 44-12 봉포항활어회센터 16호 <span class="ico_local ico_more">펼치기/접기</span> </a>
            <div class="layer_more hide">
                <dl class="dl_comm">
                    <dt class="tit_base">도로명</dt>
                    <dt class="cont">고성군 토성면 토성로 44-12</dt>
                </dl>
                <dl class="dl_comm">
                    <dt class="tit_base">지번</dt>
                    <dd class="cont">고성군 토성면 봉포리 1-5</dd>
                </dl>
            </div>
        </div>
    </div>

good4me.co.kr

    try:
        a_link = sub_link.find('a', {'class':'fn_tit'})
        a_link_url = a_link.get('href')  ## a링크
        a_link_text = a_link.get_text().strip()  ## 상호
        classify = sub_link.find('span', class_ = 'tit_sub').text.strip()  ## 업종 분류
        telNum = sub_link.find('span', class_ = 'f_url').text.strip()  ## 전화번호
        address = sub_link.find('a', class_ = 'link_more').text.strip()
        address = address.replace('펼치기/접기', '').strip()  ## 주소
        
        ## html 본문 출력
        print(f'<tr><td style="width: 30%; background-color: #f3dff7; text-align: center; font-size: 1.0em;">\
<a href="{a_link_url}" target="_blank">{a_link_text} ( {classify} )</a></td>\
<td style="width: 20%; background-color: #f3dff7; text-align: center; font-size: 1.0em;">{telNum}</td>\
<td style="width: 49%; background-color: #f3dff7; text-align: center; font-size: 1.0em;">{address}</td></tr>')
        
    except:
        continue
    
print('</table>')

 

[실행 결과]

<table style="width: 99%; border: 3px solid gray;">
<tr><td style="width: 30%; background-color: #f3dff7; text-align: center; font-size: 1.0em;"><a href="http://place.map.kakao.com/10491171" target="_blank">석이네횟집 ( 회 )</a></td><td style="width: 20%; background-color: #f3dff7; text-align: center; font-size: 1.0em;">033-633-1699</td><td style="width: 49%; background-color: #f3dff7; text-align: center; font-size: 1.0em;">강원 고성군 토성면 토성로 44-12 봉포항활어회센터 16호</td></tr>
<tr><td style="width: 30%; background-color: #f3dff7; text-align: center; font-size: 1.0em;"><a href="http://place.map.kakao.com/11892485" target="_blank">화림산가든 ( 해물,생선 )</a></td><td style="width: 20%; background-color: #f3dff7; text-align: center; font-size: 1.0em;">054-734-1077</td><td style="width: 49%; background-color: #f3dff7; text-align: center; font-size: 1.0em;">경북 영덕군 영덕읍 강변길 366</td></tr>
<tr><td style="width: 30%; background-color: #f3dff7; text-align: center; font-size: 1.0em;"><a href="http://place.map.kakao.com/8038488" target="_blank">월산식당 ( 국밥 )</a></td><td style="width: 20%; background-color: #f3dff7; text-align: center; font-size: 1.0em;">055-962-5025</td><td style="width: 49%; background-color: #f3dff7; text-align: center; font-size: 1.0em;">경남 함양군 마천면 천왕봉로 1144-2</td></tr>
</table>

## 055-286-2233 번호는 기본정보가 없어서 예외 처리됨

 

 

댓글