웹크롤링 기본 - 연습문제와 흥미로운 예제

5. 연습문제와 흥미로운 예제

연습문제3
1. 다음 뉴스 경제란 뉴스 타이틀 추출하기
- http://media.daum.net/economic/ 로 크롤링된 데이터 중 http:// 로 시작하는 링크를 다시 들어가서, title 태그 정보만 출력해보기

X 참고코드: git 저장소에서 02_examples/crawling_daum_news_title.py 를 참고
- 프로그래밍은 스스로 작성을 해야 합니다. 정 이해하기 어려울 때만 참고코드를 보시면 좋을 것 같습니다.
In [ ]:
 
In [155]:
import re
import requests
from bs4 import BeautifulSoup

res = requests.get('http://media.daum.net/economic/')
[-------------------------------------------------]

# a태그이면서 href 속성을 갖는 경우 탐색, 리스트 타입으로 links 변수에 저장됨
links = soup.select('a[href]')
for link in links:
    if re.search('http://\w+', link['href']):  # 이 부분도 개선의 여지가 있어보입니다만...(고급)
    [-------------------------------------------------]
    [-------------------------------------------------]
    [-------------------------------------------------]    
http://v.media.daum.net/v/20170916130602430 北 축전에 조롱거리 된 싱가포르 첫 여성대통령 | Daum 뉴스
http://v.media.daum.net/v/20170916143016107 교육부 "집단 휴업 사립유치원, 감사 등 책임 묻겠다" | Daum 뉴스
http://v.media.daum.net/v/20170916011416365 G70 고급 세단 시장 도전장 .. 벤츠·BMW와 럭셔리 대결 | Daum 뉴스
http://v.media.daum.net/v/20170916080026736 [WEEKLY BIZ] 파산 직전의 철강회사는 어떻게 1년 만에 2조 흑자를 냈나 | Daum 뉴스
http://v.media.daum.net/v/20170916143005105 "일본 공짜 커피를 보고 발상을 전환하라" | Daum 뉴스
http://v.media.daum.net/v/20170916063044959 [토요정담]6년째 '으르렁' 대는 文·安의 악연..'되게 하는 힘'과 '안 되게 하는 힘' | Daum 뉴스
http://v.media.daum.net/v/20170909140103098 [장은석 기자의 호갱 탈출] 물 차고 시간 안 맞는 고급 손목시계, 환불·보상받을 수 있는 방법 있나요 | Daum 뉴스
http://v.media.daum.net/v/20170916140103841 [장은석 기자의 호갱 탈출] 게임 아이템 날아갔는데 환불되나요 | Daum 뉴스
http://v.media.daum.net/v/20170916134540719 [사진현장] 초조함, 기다림, 부르튼 발. 취업문 앞 청년들 | Daum 뉴스
http://v.media.daum.net/v/20170916033622124 사라지는 '뉴스테이'.. 힘 받는 '행복주택' | Daum 뉴스
http://v.media.daum.net/v/20170915185902464 연임 앞둔 윤종규 KB금융 회장 "행장 분리, 이사회와 논의" | Daum 뉴스
http://v.media.daum.net/v/20170825194602752 [장은석 기자의 호갱 탈출] 90% 할인 판매? 쇼핑몰 '실수'면 거래 취소된다 | Daum 뉴스
http://v.media.daum.net/v/20170916130113385 "우리 개는 안 물어요"..목줄 푸는 주인들의 착각 | Daum 뉴스
http://v.media.daum.net/v/20170909090016232 [오은석의부동산재테크]과도한 수요 억제는 집값폭등을 부른다 | Daum 뉴스
http://v.media.daum.net/v/20170916060104650 결손 처분한 체납건보료 6년간 4천여억원 | Daum 뉴스
http://v.media.daum.net/v/20170915134002434 코스피, 北 미사일 도발에도 보합권..코스닥은 '상승' | Daum 뉴스
http://v.media.daum.net/v/20170916090013176 [오은석의부동산재테크]불확실한 시장에서 우량 물건을 잡는 방법 | Daum 뉴스
http://v.media.daum.net/v/20170916110251463 [박수찬의 軍] "한국, 대륙서 돈만 벌고 사드 외면" 중국의 직격탄 | Daum 뉴스
http://v.media.daum.net/v/20170916134517716 토성탐사선 카시니의 '유작'(遺作) | Daum 뉴스
http://v.media.daum.net/v/20170916100018804 安 '선명 야당'으로 국민의당, 몸값 높아졌는데..부메랑은 | Daum 뉴스
http://v.media.daum.net/v/20170916141922005 김이수 귀국 후 "표결 수용..맡은 바 소임 최선 다할 것"(종합) | Daum 뉴스
http://v.media.daum.net/v/20170916070107259 러, 파괴력 최대 '모든 폭탄 아버지' 사용 여부 진실공방 | Daum 뉴스
http://v.media.daum.net/v/20170916050303400 장제원 의원님! '스펙'이 그렇게 중요합니까? | Daum 뉴스
http://v.media.daum.net/v/20170916145844498 "소비 점진적 회복세..북핵·주택시장 규제는 걸림돌" | Daum 뉴스
http://v.media.daum.net/v/20170916141550973 "애플, '아이폰X' 한 대 팔 때 83만원 남겨..이익률 64%" | Daum 뉴스
http://v.media.daum.net/v/20170916152253742 [한국사의 안뜰] 양반·평민 함께한 마을계.. '나눔의 정' 300년을 이었다 | Daum 뉴스
http://v.media.daum.net/v/20170915105603331 '뉴스테이' 명칭 없애고 공공성 대폭 늘린다 | Daum 뉴스
http://v.media.daum.net/v/20170916153904951 대한항공, 美 휴스턴 노선 중단 검토 | Daum 뉴스
http://v.media.daum.net/v/20170916090013176 [오은석의부동산재테크]불확실한 시장에서 우량 물건을 잡는 방법 | Daum 뉴스
http://v.media.daum.net/v/20170916060308680 문 대통령, 北에 '재기불능'과 '대화복귀' 선택지 던졌다 | Daum 뉴스
http://v.media.daum.net/v/20170916044249309 선정적 코피노 캐릭터, 해도 너무한 게임 | Daum 뉴스
http://v.media.daum.net/v/20170916092937528 [단독]세월호 위성항법장치 GPS플로터, 사고 40분전 꺼졌다 | Daum 뉴스
http://v.media.daum.net/v/20170916050110377 "김명수까지 퇴짜 놓다간   호남서 민심역풍 불수도.. " | Daum 뉴스
http://v.media.daum.net/v/20170916154442038 [일문일답]교육부 "휴업 참여 사립유치원 징계 예외는 없다" | Daum 뉴스
http://v.media.daum.net/v/20170916070410344 비트코인 거품 논란 점입가경..튤립 파동과 다른 점은? | Daum 뉴스
http://v.media.daum.net/v/20170915185045320 끝내 中롯데마트 철수 결정한 롯데..8조원 투자한 中사업 '흔들'(종합) | Daum 뉴스
http://v.media.daum.net/v/20170916130031377 [양낙규의 Defence Club]EMP 서울상공서 터지면 어떻게 되나 | Daum 뉴스
http://v.media.daum.net/v/20170916134540719 [사진현장] 초조함, 기다림, 부르튼 발. 취업문 앞 청년들 | Daum 뉴스
http://v.media.daum.net/v/20170916143337144 [단독] '무도' 김태호PD "노조탈퇴 제안 받았지만 거절했다" | Daum 뉴스
http://v.media.daum.net/v/20170915174005771 제네시스 G70 "BMW 3보다 크고, 벤츠 C보다 세다" | Daum 뉴스
http://v.media.daum.net/v/20170916030222904 '윤종규 2기' KB금융, 신한과 금융 지존 가린다 | Daum 뉴스
http://v.media.daum.net/v/20170916070410344 비트코인 거품 논란 점입가경..튤립 파동과 다른 점은? | Daum 뉴스
http://v.media.daum.net/v/20170916110101442 "소비 점진적 회복세..북핵·주택시장 규제로 위축 우려" | Daum 뉴스
http://v.media.daum.net/v/20170916011537371 KB금융 회장 첫 연임 .. 윤종규, 노조와 갈등 풀어낼까 | Daum 뉴스
http://v.media.daum.net/v/20170915084258568 [단독]박근혜의 '뉴스테이' 국토부서 '아웃' | Daum 뉴스
http://v.media.daum.net/v/20170916150148531 교육부 "휴업 유치원, 지원금 회수·원비 환불·폐쇄 등 조치"(종합) | Daum 뉴스
http://v.media.daum.net/v/20170916010116289 [현장 속으로] 앞 거의 못 보는 소녀 VR기기 쓰자 "단발머리 .. 어, 우리 엄마?" | Daum 뉴스
http://v.media.daum.net/v/20170916143610179 [이슈플러스] '주인'은 없고 '깃발'만 나부끼는 보수의 몰락 | Daum 뉴스
http://v.media.daum.net/v/20170915161046048 코스피, 北도발에도 '굳건'..한달여만에 2,380선 재탈환(종합) | Daum 뉴스
http://v.media.daum.net/v/20170916124836295 "SK하이닉스, 도시바 의결권 15%..거부권은 없어" | Daum 뉴스
http://v.media.daum.net/v/20170916125043305 고립 속 '나홀로 육아'..비극 빚는 '주부 우울증' | Daum 뉴스
http://v.media.daum.net/v/20170915102957366 비트코인 '폭삭'.. 中거래소 중단에 투자자 이탈 | Daum 뉴스
http://v.media.daum.net/v/20170915232122548 中 비트코인 거래소 오케이코인·후오비 10월31일 폐쇄 | Daum 뉴스
http://v.media.daum.net/v/20170915171609085 [마감시황][종합]코스피, 北 미사일 도발에도 2380선 상승 마감 | Daum 뉴스
http://v.media.daum.net/v/20170916124836295 "SK하이닉스, 도시바 의결권 15%..거부권은 없어" | Daum 뉴스
http://v.media.daum.net/v/20170916050205389 [기획] '맷집' 생긴 증시.. 北 연이은 도발에도 '덤덤' | Daum 뉴스
http://v.media.daum.net/v/20170916050303400 장제원 의원님! '스펙'이 그렇게 중요합니까? | Daum 뉴스
http://v.media.daum.net/v/20170916044251311 '외풍' 막아낸 KB금융 이사진의 힘 | Daum 뉴스
http://v.media.daum.net/v/20170902140104281 [장은석 기자의 호갱 탈출] 숙박 앱 비회원도 예약 7일 이내엔 위약금 안 뗍니다 | Daum 뉴스
http://v.media.daum.net/v/20170916124836295 "SK하이닉스, 도시바 의결권 15%..거부권은 없어" | Daum 뉴스
http://v.media.daum.net/v/20170916044251311 '외풍' 막아낸 KB금융 이사진의 힘 | Daum 뉴스
http://v.media.daum.net/v/20170916125613346 사흘 만에 처음 입 연 '240번 버스 기사' | Daum 뉴스
http://v.media.daum.net/v/20170916144646338 與 "김문수, '文대통령은 김정은 기쁨조' 막말 사과해야" | Daum 뉴스
http://v.media.daum.net/v/20170916134540719 [사진현장] 초조함, 기다림, 부르튼 발. 취업문 앞 청년들 | Daum 뉴스
http://v.media.daum.net/v/20170826090025529 [오은석의 부동산 재테크]8.2 대책, 3~4년 뒤 집값은 폭등한다. | Daum 뉴스
http://v.media.daum.net/v/20170915174005771 제네시스 G70 "BMW 3보다 크고, 벤츠 C보다 세다" | Daum 뉴스
http://v.media.daum.net/v/20170916153558897 코스닥, 외국인 2116억원 순매수..671.30 마감 | Daum 뉴스
http://v.media.daum.net/v/20170916140103841 [장은석 기자의 호갱 탈출] 게임 아이템 날아갔는데 환불되나요 | Daum 뉴스
http://v.media.daum.net/v/20170916140103841 [장은석 기자의 호갱 탈출] 게임 아이템 날아갔는데 환불되나요 | Daum 뉴스
http://v.media.daum.net/v/20170916130508423 "늦은 추석 과일 맛도 최고"..기상여건 양호 덕분 | Daum 뉴스
http://v.media.daum.net/v/20170916125436333 갤노트8 첫날 20만대 개통..'떴다방식' 불법 보조금 등장 | Daum 뉴스
http://v.media.daum.net/v/20170916080104746 홧김에 창문 밖으로 후배 밀친 20대, 유족 합의 후 선처 | Daum 뉴스
http://v.media.daum.net/v/20170916110125448 [뉴스탐색] '240번 버스기사' 사건 최초유포자 사과 진정성 있나? | Daum 뉴스
http://v.media.daum.net/v/20170916140103841 [장은석 기자의 호갱 탈출] 게임 아이템 날아갔는데 환불되나요 | Daum 뉴스
http://v.media.daum.net/v/20170916141742991 박근혜 전 대통령 무죄 석방 서명운동 | Daum 뉴스
http://v.media.daum.net/v/20170916080014728 "같은 역에서 내리자" 지하철서 여고생 추행 60대 징역형 | Daum 뉴스
http://v.media.daum.net/v/20170916125401328 공무원 정년 연장하는 일본, 다른 나라들은 어떨까 | Daum 뉴스
http://v.media.daum.net/v/20170902090018632 [오은석의 부동산 재테크]전세 대란의 징조 | Daum 뉴스
http://v.media.daum.net/v/20170916124836295 "SK하이닉스, 도시바 의결권 15%..거부권은 없어" | Daum 뉴스
http://v.media.daum.net/v/20170916152253742 [한국사의 안뜰] 양반·평민 함께한 마을계.. '나눔의 정' 300년을 이었다 | Daum 뉴스
http://v.media.daum.net/v/20170916111912610 세월호 내부 영상 공개.. 침몰원인 밝혀질까 | Daum 뉴스
http://v.media.daum.net/v/20170915103230504 중국 최대 가상화폐거래소 업무 중단..비트코인 28% 급락 | Daum 뉴스
http://v.media.daum.net/v/20170915181329653 [현장+]제네시스 G70 출시 이례적 '금요일' 택한 속내 | Daum 뉴스
http://v.media.daum.net/v/20170915150747489 박근혜표 임대주택 '뉴스테이' 명칭 사라진다 | Daum 뉴스
http://v.media.daum.net/v/20170916152752789 신고리5·6호기 시민참여단 478명, 첫 오리엔테이션 참석(종합) | Daum 뉴스
http://v.media.daum.net/v/20170916135601809 "무책임한 잠적 황당"..'알바추노'에 속끓는 자영업자들 | Daum 뉴스
In [ ]:
 
연습문제4
1. 네이버 실시간검색어 20개 추출하기
- Chrome 의 Copy Selector를 활용

X 참고코드: git 저장소에서 02_examples/crawling_naver_realtime_keyword.py 를 참고
- 프로그래밍은 스스로 작성을 해야 합니다. 정 이해하기 어려울 때만 참고코드를 보시면 좋을 것 같습니다.
In [ ]:
 
In [188]:
import requests
from bs4 import BeautifulSoup

res = requests.get('https://www.naver.com/')
soup = BeautifulSoup(res.content, 'html.parser')

# a 태그이면서 href 속성 값이 특정한 값을 갖는 경우 탐색
link_title = soup.select([------------------------------------------])
for num in range(len(link_title)):
    [------------------------------------------]
    [------------------------------------------]
1 서현진
2 이건희
3 무한도전
4 태풍 독수리
5 황금빛내인생
6 청년경찰
7 보그맘
8 그것이 알고싶다
9 아는형님
10 소사이어티 게임 2
11 롤챔스 승강전
12 롯데시네마
13 메가박스
14 편성표
15 프로야구중계
16 태풍경로
17 스팀
18 테일즈런너
19 cj채용
20 아프리카티비
In [ ]:
 


흥미로운 예제
1. slack 메세지로 만들어보는 부동산 뉴스 (과제로 해당 코드를 설명해서 공유드리겠습니다.)
In [46]:
from bs4 import BeautifulSoup
import datetime
import json

random_url = 'https://hooks.slack.com/services/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'
res = requests.get('http://www.drapt.com/e_sale/index.htm?page_name=esale_news&menu_key=34')
soup = BeautifulSoup(res.content, 'html.parser')

link_titles = soup.find_all('a', class_='c0000000')
link_dates = soup.find_all('span', class_='ffth fs11 c807f7f')
today_date = datetime.date.today()
today_message = '오늘의 부동산 뉴스 [%s]' % str(today_date)
payload = {'text': today_message}
estate_info_message = json.dumps(payload)
requests.post(random_url, data=estate_info_message)

for num, link_title in enumerate(link_titles):
    if str(today_date) == link_dates[num].get_text():
        # estate_info = '<a herf=\"http://www.drapt.com/e_sale/%s\">%s</a>' % (link_title['href'], link_title.get_text())
        # Reference for creating a link: https://api.slack.com/incoming-webhooks
        estate_info = '%d] <http://www.drapt.com/e_sale/%s|%s>' % (num + 1, link_title['href'], link_title.get_text())
        payload = {'text': estate_info}
        estate_info_message = json.dumps(payload)
        requests.post(random_url, data=estate_info_message)
In [ ]: