1. HTML¶
- HTML: 웹 페이지의 구조를 나타내기 위한 언어이며 태그로 구성되어 있다.
- 태그
- 꺾쇠 괄호(< >)로 표시하며 많은 대부분의 태그는 시작태그와 종료태그로 구성된다.
가장 큰 제목
<hr width = '500', align = 'left'>두 번째로 큰 제목 - 태그는 속성명과 속성값이 올 수 있다.
가장 큰 제목
- 태그는 부모 태그와 자식 태그가 있다.
- 꺾쇠 괄호(< >)로 표시하며 많은 대부분의 태그는 시작태그와 종료태그로 구성된다.
크롤링 시 자주 사용되는 태그
- div: 구역 나누기
- a: 링크
- h1~h6: 제목 (h1의 글자 크기가 가장 크고, h6의 글자 크기가 가장 작다.)
- p: 문단
- ul: 순서없는 목록 선언
- li: 목록
2. 네이버 헤드라인 뉴스 크롤링¶
목차
- requests 라이브러리
- beautifulsoup 라이브러리
- 네이버 헤드라인 뉴스 크롤링
2.1 requests 라이브러리¶
- HTTP 통신을 위한 파이썬 라이브러리
In [ ]:
# 크롤링에 필요한 requests 라이브러리 불러오기
import requests as rq
# 네이버 서버와 대화 요청과 응답
response = rq.get('https://www.andong.ac.kr/main/index.do')
htmlCode = response.text
print(htmlCode)
2.2 Beautifulsoup 라이브러리¶
- HTML을 분석하기 위한 라이브러리
In [ ]:
# NM_set_home_btn
#크롤링시 필요한 라이브러리 불러오기
import requests as rq
from bs4 import BeautifulSoup as bs
# 네이버 서버와 대화 요청과 응답
response = rq.get('https://www.naver.com')
htmlCode = response.text
# html 번역기(parser)를 이용하여 HTML소스를 분석
soup = bs(htmlCode, 'html.parser')
#print(soup)
# id가 NM_set_home_btn인 정보 한 개를 찾아서 textInfo에 반환
Info = soup.select_one('#NM_set_home_btn')
# textInfo의 정보 중 텍스트 요소만 출력
print(Info.text)
네이버를 시작페이지로
In [ ]:
#.title.elss
#크롤링시 필요한 라이브러리 불러오기
from bs4 import BeautifulSoup as bs
import requests as rq
# 네이버 서버와 대화 요청과 응답
response = rq.get('https://www.naver.com')
htmlCode = response.text
# html 번역기(parser)를 이용하여 HTML소스를 분석
soup = bs(htmlCode, 'html.parser')
# id가 NM_set_home_btn인 정보 한 개를 찾아서 textInfo에 반환
textInfo = soup.select_one('a.btn_sort')
print(textInfo.text)
구독한 언론사
CSS 선택자의 종류
- 태그 선택자: 태그의 이름으로 선택 (예) h1, a 등
- id 선택자: id명 앞에 #을 붙인다. (예) #NM_set_home_btn 등
- class 선택자: class명 앞에 .을 붙인다. (예) .login_msg, p.login_msg 등
- 자식 선택자: 내가 원하는 태그에 별명이 없을 때 사용
- 바로 앞에 있는 태그를 사용
- (예) .news_head > h3
네이버 기사 헤드라인 검색
네이버 뉴스 IT/과학 사이트의 헤드라인 뉴스의 헤드 한 개 가져오기
In [ ]:
#https://news.naver.com/main/main.naver?mode=LSD&mid=shm&sid1=105
#크롤링시 필요한 라이브러리 불러오기 - 불러오기 진행이 되지 않을 것
from bs4 import BeautifulSoup as bs
import requests as rq
# 네이버 서버와 대화 요청과 응답
response = rq.get('https://news.naver.com/main/main.naver?mode=LSD&mid=shm&sid1=105')
htmlCode = response.text
# html 번역기(parser)를 이용하여 HTML소스를 분석
soup = bs(htmlCode, 'html.parser')
# id가 NM_set_home_btn인 정보 한 개를 찾아서 textInfo에 반환
textInfo = soup.select_one('.cluster_text_headline')
# textInfo의 정보 중 텍스트 요소만 출력
print(textInfo.text)
네이버에서 로봇이 크롤링을 하고 있다고 판단하여 커넥션 거절을 하면
- header = {'User-agent' : 'Mozila/2.0'}
- response = rq.get('https://news.naver.com/main/main.naver?mode=LSD&mid=shm&sid1=101', headers = header)
In [ ]:
#크롤링시 필요한 라이브러리 불러오기
from bs4 import BeautifulSoup as bs
import requests as rq
#
header = {'User-agent' : 'Mozila/2.0'}
# 네이버 서버와 대화 요청과 응답
response = rq.get('https://news.naver.com/main/main.naver?mode=LSD&mid=shm&sid1=105', headers = header)
htmlCode = response.text
# html 번역기(parser)를 이용하여 HTML소스를 분석
soup = bs(htmlCode, 'html.parser')
# id가 NM_set_home_btn인 정보 한 개를 찾아서 textInfo에 반환
Info = soup.select_one('.h7 > a')
# textInfo의 정보 중 텍스트 요소만 출력
print(Info.text)
IT/과학
네이버 뉴스 IT/과학 사이트의 헤드라인 뉴스의 헤드 여러 개 가져오기
In [ ]:
#크롤링시 필요한 라이브러리 불러오기
from bs4 import BeautifulSoup as bs
import requests as rq
#
header = {'User-agent' : 'Mozila/2.0'}
# 네이버 서버와 대화 요청과 응답
response = rq.get('https://news.naver.com/main/main.naver?mode=LSD&mid=shm&sid1=101', headers = header)
htmlCode = response.text
# html 번역기(parser)를 이용하여 HTML소스를 분석
soup = bs(htmlCode, 'html.parser')
# id가 NM_set_home_btn인 정보 한 개를 찾아서 titles에 반환
titles = soup.select('.cluster_text_headline')
# titles를 출력하여 확인
#print(titles) # 리스트 구조네!!
for title in titles:
print(title.text)
print(len(titles))
삼성화재 안내견학교, 3년 만에 오프라인 분양식…故 이건희 회장 뜻따라, '시각장애인에 빛' 밝혀준 29년
이건희 회장 만든 삼성화재안내견학교 '함께 내일로 걷다,'
삼성 안내견학교서 훈련 마친 안내견 분양식 열려
시각장애인 안내견과 ‘함께 내일로 걷다’…삼성, 안내견 분양행사 개최
美 최종 기준금리 전망 6%까지…10년물 국채금리도 11년만에 3.5% 돌파
美 국채 10년물 금리 年 3.5% 돌파
10년물 미 국채금리, 11년만에 첫 3.5% 돌파…경기침체 우려↑
미 국채수익률 급등…금리인상폭 075%p '이상' 기정사실
한국타이어, 전기차 전용 타이어 '아이온(iON)' 풀 라인업 국내 출시
한국타이어, 전기차 전용 타이어 브랜드 '아이온' 출시
한국타이어, 전기차 타이어 ‘아이온’ 국내 출시…시장 선점한다
한국타이어 첫 '전기차 타이어'…유럽 이어 국내서도 판매 돌입
쿠팡, '상생 리포트 2022' 발간…지난 2년간 총 9732억 원 지원
3개월째 쿠팡 본사 ‘점거 농성’ 벌인 노조의 가입 권유에…뿔난 직원들“본사 불법 점거가 성과인가요?”
`경영진 책임론`에 또 변명한 포스코 "인명 피해는 없었다"
포스코 "태풍 대비 가동중단 등 초강수 방재대책으로 최악 막았다"
10월 전기·가스요금 예정보다 더 오르나
4분기 전기요금 조정단가 결정 연기…관계부처와 협의 중
김주현 "산업·기업 국책은행 '알짜 자산' 시중은행 이관 추진 안 해"
김주현 금융위원장 “산업은행 우량자산 시중은행 이관 추진 안해”
배추 한포기에 1만원…"이번주가 가격 정점, 3000톤 공급"
정부 “노지채소 값, 평년 대비 40% 높아…이외 농축산물 내림세”
'갑질' 계속되는 새마을금고…조직문화 개선팀 신설
정용현 춘천남부새마을금고이사장
상반기 여전사 순익 2조 700억원…전년 比 735억 ↑
카드사 제외 여전사 상반기 순익 2조700억...전년동기 대비 3.7%↑
尹정부 드라이브에 맞춘 ‘녹색 도장’… 원전 진흥책 변질 논란 [원전 ‘녹색경제’ 포함]
정부 '원전=친환경' 공식화…녹색분류체계 개정안에 포함
안심전환대출 출시 이틀째...4,900억 원 신청
안심전환대출 접수 3거래일간…7천966건·7천473억원 신청
[e갤러리] 없는 세상, 있는 듯 펼치는 법…최영빈 '멀리아직작은다리큰달'
[e갤러리] 긴목 긴팔, 그가 돌아왔다 납작하게…김경민 '너의 심장'
[e갤러리] 세상서 가장 고단한 그림…김남표 '즉흥적 풍경-기원'
[e갤러리] 치즈볼 병과 찐득하게 교감하다…정수영 '혼자라 좋은 밤'
34
특정 검색어가 포함된 기사의 제목과 링크 수집하기
- 예: "빅데이터"를 키워드로 검색한 뉴스의 제목과 링크 수집
- 네이버 검색창에 "빅데이터" 입력 후 [뉴스] 클릭
In [ ]:
#크롤링시 필요한 라이브러리 불러오기
from bs4 import BeautifulSoup as bs
import requests as rq
#
header = {'User-agent' : 'Mozila/2.0'}
# 네이버 서버와 대화 요청과 응답
response = rq.get('https://search.naver.com/search.naver?where=news&sm=tab_jum&query=%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0', headers = header)
htmlCode = response.text
# html 번역기(parser)를 이용하여 HTML소스를 분석
soup = bs(htmlCode, 'html.parser')
# id가 NM_set_home_btn인 정보 한 개를 찾아서 titles에 반환
news = soup.select('a.news_tit')
# news를 출력하여 확인
#print(news) # 리스트 구조네!!
for n in news:
title = n.text
url= n.attrs['href']
print(title, url)
충북대, 빅데이터 활용 농식품 소비·가격 예측 플랫폼 개발 https://www.news1.kr/articles/4808210
네이버클라우드, 정부 현안 분석에 ‘클라우드 데이터 박스’ 지원 https://zdnet.co.kr/view/?no=20220920114848
연세의료원, '빅데이터·중입자치료'로 미래 정밀의료 실현 선도한다 http://www.getnews.co.kr/news/articleView.html?idxno=599248
공주시, '과학 행정' 추진..."빅데이터 분석 기반" https://daily.hankooki.com/news/articleView.html?idxno=873040
한국프롭테크포럼, '부동산 데이터 아카데미' 개최 http://www.newsis.com/view/?id=NISX20220920_0002019729&cID=10401&pID=10400
충북대, 빅데이터 활용해 농식품 소비·가격 예측한다 http://www.goodmorningcc.com/news/articleView.html?idxno=276488
'노벨평화상' 마리아 레사 "빅테크 기업들이 정보 돈벌이로 악용" https://news.jtbc.co.kr/article/article.aspx?news_id=NB12078711
공주시, 빅데이터 분석 기반 '과학 행정' 추진! https://www.gukjenews.com/news/articleView.html?idxno=2554509
경복대, 빅데이터 기반 '학생 맞춤형 시스템' 개발 운영 http://www.newsis.com/view/?id=NISX20220920_0002019930&cID=14001&pID=14000
일본인 데이터로 보험 만드는데…'민영화 편견'에 갇힌 K의료 https://www.sedaily.com/NewsView/26B4VUNC0Z
In [ ]:
#크롤링시 필요한 라이브러리 불러오기
from bs4 import BeautifulSoup as bs
import requests as rq
import pandas as pd
#
header = {'User-agent' : 'Mozila/2.0'}
# 네이버 서버와 대화 요청과 응답
response = rq.get('https://search.naver.com/search.naver?where=news&sm=tab_jum&query=%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0', headers = header)
htmlCode = response.text
# html 번역기(parser)를 이용하여 HTML소스를 분석
soup = bs(htmlCode, 'html.parser')
# id가 NM_set_home_btn인 정보 한 개를 찾아서 titles에 반환
news = soup.select('.news_tit')
# news를 출력하여 확인
#print(news) # 리스트 구조네!!
title = []
url = []
for n in news:
title.append(n.text)
url.append(n.attrs['href'])
df = pd.DataFrame({'제목' : title, 'URL' : url})
df
Out[ ]:
제목 | URL | |
---|---|---|
0 | 충북대, 빅데이터 활용 농식품 소비·가격 예측 플랫폼 개발 | https://www.news1.kr/articles/4808210 |
1 | 네이버클라우드, 정부 현안 분석에 ‘클라우드 데이터 박스’ 지원 | https://zdnet.co.kr/view/?no=20220920114848 |
2 | 연세의료원, '빅데이터·중입자치료'로 미래 정밀의료 실현 선도한다 | http://www.getnews.co.kr/news/articleView.html... |
3 | 공주시, '과학 행정' 추진..."빅데이터 분석 기반" | https://daily.hankooki.com/news/articleView.ht... |
4 | 한국프롭테크포럼, '부동산 데이터 아카데미' 개최 | http://www.newsis.com/view/?id=NISX20220920_00... |
5 | '노벨평화상' 마리아 레사 "빅테크 기업들이 정보 돈벌이로 악용" | https://news.jtbc.co.kr/article/article.aspx?n... |
6 | 경복대, 빅데이터 기반 '학생 맞춤형 시스템' 개발 운영 | http://www.newsis.com/view/?id=NISX20220920_00... |
7 | 일본인 데이터로 보험 만드는데…'민영화 편견'에 갇힌 K의료 | https://www.sedaily.com/NewsView/26B4VUNC0Z |
8 | 건강보험 빅데이터 활용 민관 협력 체계 구축 위한 간담회 실시 | http://news.heraldcorp.com/view.php?ud=2022091... |
9 | 100만명 데이터 분석으로 치매·심혈관 동시연관 유전변이 규명 | https://www.yna.co.kr/view/AKR2022092010590006... |
여러 페이지의 기사 제목과 링크 수집하기
In [ ]:
#크롤링시 필요한 라이브러리 불러오기
from bs4 import BeautifulSoup as bs
import requests as rq
import pandas as pd
#
header = {'User-agent' : 'Mozila/2.0'}
# 네이버 서버와 대화 요청과 응답
keyword = input('검색어 입력: ')
title = []
url = []
response = rq.get(f'https://search.naver.com/search.naver?where=news&sm=tab_pge&query={keyword}', headers = header)
htmlCode = response.text
# html 번역기(parser)를 이용하여 HTML소스를 분석
soup = bs(htmlCode, 'html.parser')
# id가 NM_set_home_btn인 정보 한 개를 찾아서 titles에 반환
news = soup.select('.news_tit')
# news를 출력하여 확인
#print(news) # 리스트 구조네!!
for n in news:
title.append(n.text)
url.append(n.attrs['href'])
df = pd.DataFrame({'제목' : title, 'URL' : url})
df
검색어 입력: 삼성전자
Out[ ]:
제목 | URL | |
---|---|---|
0 | 삼성전자, '비스포크 무풍 시스템에어컨' 출시 | http://sports.chosun.com/news/ntype.htm?id=202... |
1 | 삼성 비스포크 시스템에어컨 출시…실외기 하나로 5대까지 조합 | https://www.yna.co.kr/view/AKR2022092004100000... |
2 | [단독]‘꼰대’ ‘강성’···직원들 성향 파악 문건 만든 삼성전자판매사 노... | https://www.khan.co.kr/national/national-gener... |
3 | 삼성전자가 ‘삼성화재안내견학교’를 홍보한 이유는? | https://www.hani.co.kr/arti/economy/marketing/... |
4 | 중‧고등 여학생 1500명, 삼성전자 등 31개사 탐방 | https://zdnet.co.kr/view/?no=20220919181124 |
5 | [단독]삼성전자 노조도 임금피크제 소송 제기…"깎인 임금 보상하라" | http://news.mt.co.kr/mtview.php?no=20220919134... |
6 | 삼성·SK 경영진, 부산엑스포 유치 위해 '전력' | http://www.newsis.com/view/?id=NISX20220919_00... |
7 | 안내견·은퇴견 14마리 새 '犬生' 시작…삼성 29년의 동행 | http://www.edaily.co.kr/news/newspath.asp?news... |
8 | "삼성전자, 언제 오르나" 기다렸는데…쏟아지는 암울한 전망 | https://www.hankyung.com/finance/article/20220... |
9 | 3분기 실적우려 본격화?...NH證, 삼성전자 목표가 하향 | https://www.mk.co.kr/economy/view/2022/823710 |
In [ ]:
#크롤링시 필요한 라이브러리 불러오기
from bs4 import BeautifulSoup as bs
import requests as rq
import pandas as pd
#
header = {'User-agent' : 'Mozila/2.0'}
# 네이버 서버와 대화 요청과 응답
keyword = input('검색어 입력: ')
title = []
url = []
page_start = [1, 11, 21]
for i in page_start:
response = rq.get(f'https://search.naver.com/search.naver?where=news&sm=tab_pge&query={keyword}&sort=0&photo=0&field=0&pd=0&ds=&de=&cluster_rank=97&mynews=0&office_type=0&office_section_code=0&news_office_checked=&nso=so:r,p:all,a:all&start={i}', headers = header)
htmlCode = response.text
# html 번역기(parser)를 이용하여 HTML소스를 분석
soup = bs(htmlCode, 'html.parser')
# id가 NM_set_home_btn인 정보 한 개를 찾아서 titles에 반환
news = soup.select('.news_tit')
# news를 출력하여 확인
#print(news) # 리스트 구조네!!
for n in news:
title.append(n.text)
url.append(n.attrs['href'])
df = pd.DataFrame({'제목' : title, 'URL' : url})
df
검색어 입력: 코로나
Out[ ]:
제목 | URL | |
---|---|---|
0 | [단독] 남궁민, 코로나19 확진..오늘(20일) '천원짜리 변호사' 제발회 취소 | http://sports.chosun.com/news/ntype.htm?id=202... |
1 | 에미상 수상 배우 이정재, 코로나 확진 | https://www.ytn.co.kr/_ln/0106_202209201035444028 |
2 | [단독] 코로나 대출 원리금 상환유예 1년 더…만기연장은 2025년 9월까지 | https://www.news1.kr/articles/4807175 |
3 | 실외마스크·입국검사 완전해제 '만지작'…코로나출구 논의 속도 | https://www.yna.co.kr/view/AKR2022092008760053... |
4 | 코로나19 백신 맞은 뒤 뇌질환…법원, 인과관계 인정했다 | https://news.jtbc.co.kr/article/article.aspx?n... |
5 | 백악관 "코로나19 공중보건 비상사태 해제 계획 없다" | https://biz.sbs.co.kr/article_hub/20000081031?... |
6 | 한 총리 "독감·코로나19 동시 유행 가능성 철저 대비" | http://www.newsis.com/view/?id=NISX20220920_00... |
7 | 법원 "코로나 백신 후유증, 정부가 보상해야" 첫 판결 | http://news.tvchosun.com/site/data/html_dir/20... |
8 | [월드리포트] 코로나의 끝은 '사무실 출근'?…왜 출근에 집착할까 | https://news.sbs.co.kr/news/endPage.do?news_id... |
9 | "코로나 끝났다" 바이든 발언에 국내 항공주 강세 | http://news.mk.co.kr/newsRead.php?no=828089&ye... |
10 | [월드리포트] 코로나의 끝은 '사무실 출근'?…왜 출근에 집착할까 | https://news.sbs.co.kr/news/endPage.do?news_id... |
11 | 코로나19 신규확진 4만7917명… 사망 24명·위중증 497명 | https://biz.chosun.com/topics/topics_social/20... |
12 | "코로나 끝났다" 바이든 발언에 국내 항공주 강세 | http://news.mk.co.kr/newsRead.php?no=828089&ye... |
13 | "코로나 팬데믹 끝났다"…또 혼란 일으킨 바이든 | https://www.sedaily.com/NewsView/26B5CZKL7U |
14 | 1인당 소주 53병, 맥주 83병 마셔..."코로나에 회식 줄어" | http://www.fnnews.com/news/202209200929510024 |
15 | 코로나 신규 확진 1만명대 10주 만에 최저… 내일부터 독감 접종 | https://www.seoul.co.kr/news/newsView.php?id=2... |
16 | "독감·코로나 백신 동시접종 하려는데, 부작용 없나요?"[Q&A] | http://www.newsis.com/view/?id=NISX20220919_00... |
17 | 21일부터 왼팔에 독감·오른팔엔 코로나 백신… 접종 대상은? | http://moneys.mt.co.kr/news/mwView.php?no=2022... |
18 | 쿠팡, 코로나시대 소상공인과 함께한 '상생 리포트' 발간 | https://www.yna.co.kr/view/AKR2022092006810000... |
19 | 21일 어린이부터 독감접종…반대쪽 팔엔 '코로나 동시 접종' 무관 | https://www.news1.kr/articles/4806123 |
20 | 코로나19 출구 보이나...입국 검사 해제·실외 완전 노마스크 '솔솔' | https://hankookilbo.com/News/Read/A20220920145... |
21 | 횡성군, 무료 인플루엔자 접종…코로나·독감 예방 | http://www.newsis.com/view/?id=NISX20220920_00... |
22 | 코로나 유행 감소세 지속…"겨울 이후 재유행 가능성"(종합) | http://www.newsis.com/view/?id=NISX20220920_00... |
23 | 남궁민 코로나 확진 [전문] | https://sports.donga.com/article/all/20220920/... |
24 | 코로나 영향? 아동학대범 1년 새 2배로 | http://www.segye.com/content/html/2022/09/20/2... |
25 | 코로나 사태 이후 늘어난 화장 수요…경주시, 화장로 증설 | https://www.yna.co.kr/view/AKR2022092015470005... |
26 | 北 10월1일부터 마스크 착용 의무화…코로나19와 독감 동시 유행 우려 | http://www.newsis.com/view/?id=NISX20220920_00... |
27 | 올가을 코로나 누르고 독감 유행 가능성…"소아 보호책 시급" | https://www.nocutnews.co.kr/news/5819689 |
28 | "코로나19 유행 이후 발달장애 진단 연령 늦어져" | http://www.newsis.com/view/?id=NISX20220920_00... |
29 | 최근 코로나 확진자 10명 중 1명은 재감염 | http://www.ichannela.com/news/main/news_detail... |
- https://search.naver.com/search.naver?where=news&sm=tab_pge&query=%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0&sort=0&photo=0&field=0&pd=0&ds=&de=&cluster_rank=97&mynews=0&office_type=0&office_section_code=0&news_office_checked=&nso=so:r,p:all,a:all&start=1
- https://search.naver.com/search.naver?where=news&sm=tab_pge&query=%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0&sort=0&photo=0&field=0&pd=0&ds=&de=&cluster_rank=125&mynews=0&office_type=0&office_section_code=0&news_office_checked=&nso=so:r,p:all,a:all&start=11
- https://search.naver.com/search.naver?where=news&sm=tab_pge&query=%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0&sort=0&photo=0&field=0&pd=0&ds=&de=&cluster_rank=149&mynews=0&office_type=0&office_section_code=0&news_office_checked=&nso=so:r,p:all,a:all&start=21
'파이썬 활용 > 크롤링' 카테고리의 다른 글
API 크롤링_지역별 산불 통계 _ 학교 수업 때 배운 부분 (0) | 2022.10.25 |
---|---|
크롤링한 데이터 엑셀에 저장 후 불러오기 (0) | 2022.10.24 |
네이버 api json 데이터 가져오기 (0) | 2022.10.24 |
기상 데이터 크롤링(넘파이로 전처리) (0) | 2022.10.24 |
지마켓 탑100개 (품명 ,가격) 크롤링 + 엑셀에 저장 (0) | 2022.10.24 |