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&pg=1&s=TO&rc=1&d=10491171&r=1&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&pg=1&s=TO&rc=1&d=10491171&r=1&p=33&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>
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 번호는 기본정보가 없어서 예외 처리됨
'코딩 연습 > 코딩배우기' 카테고리의 다른 글
파이썬 크롤링(Crawling) 연습 - 네이버 영화 평점/리뷰, 영화코드 추출 (0) | 2020.11.04 |
---|---|
파이썬 크롤링(Crawling) 연습 - BeautifulSoup 활용 기초 (0) | 2020.11.03 |
파이썬 크롤링(Crawling) 연습 - find(), find_all() 사용한 네이버 증시 주가 추출 (0) | 2020.10.29 |
파이썬 크롤링(Crawling) 연습 - BeautifulSoup 객체를 모듈로 만들어서 사용해보기 (0) | 2020.10.27 |
파이썬 웹 크롤링(Web Crawling) 알아보기 #9 (0) | 2020.10.26 |
댓글