뉴스 기사 크롤링 | 네이버 뉴스 X 파이썬(Beautifulsoup으로 네이버 뉴스기사 크롤링) 모든 답변

당신은 주제를 찾고 있습니까 “뉴스 기사 크롤링 – 네이버 뉴스 X 파이썬(BeautifulSoup으로 네이버 뉴스기사 크롤링)“? 다음 카테고리의 웹사이트 https://you.maxfit.vn 에서 귀하의 모든 질문에 답변해 드립니다: https://you.maxfit.vn/blog/. 바로 아래에서 답을 찾을 수 있습니다. 작성자 위대한 개스피 The Great GAESPI 이(가) 작성한 기사에는 조회수 3,647회 및 좋아요 51개 개의 좋아요가 있습니다.

뉴스 기사 크롤링 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 네이버 뉴스 X 파이썬(BeautifulSoup으로 네이버 뉴스기사 크롤링) – 뉴스 기사 크롤링 주제에 대한 세부정보를 참조하세요

위대한 투자를 위해 뉴스기사 타이틀 하나하나 뽑아내는 노동, 쉽지 않습니다…귀찮음은 덤이구요. 이 영상을 따라하시면 그 귀찮음이 조금이나가 경감되지 않을까 사료됩니다. 위대한 투자하시기 바랍니다.
#크롤링 #네이버뉴스 #beautifulsoup

뉴스 기사 크롤링 주제에 대한 자세한 내용은 여기를 참조하세요.

네이버 뉴스 수집하기 – 쉽게 따라하는 데이터수집기 만들기

세번째 스테이지에서는 네이버 뉴스 기사를 수집하며 안티크롤링 회피방법과 다양한 선택자에 대해서 공부합니다. 네이버뉴스 기사 수집 시작하기.

+ 여기에 보기

Source: book.coalastudy.com

Date Published: 4/19/2022

View: 4946

네이버 뉴스 기사 크롤링 | 기억보다 기록을

네이버 뉴스에 접속하여, 원하는 키워드와 원하는 기간을 설정하여 나오는 모든 기사 검색 결과를 크롤링하는 방법입니다. 기사 타이틀, 기사 등록일, …

+ 여기에 자세히 보기

Source: kyounghwan01.github.io

Date Published: 7/1/2022

View: 388

[2탄] 쉽게 따라하는 네이버 뉴스 크롤링(python) – title, URL …

지난 편에 이어 네이버 뉴스를 크롤링하는 python 코드를 작성하는 포스팅을 합니다. 지난 편은 네이버 뉴스 웹 구성 체계를 확인하여 원하는 정보(뉴스 기사 title, …

+ 더 읽기

Source: everyday-tech.tistory.com

Date Published: 3/6/2021

View: 8231

파이썬 크롤링 실습 – 뉴스기사 목록의 내용 수집하기 – DevSSOM

뉴스기사 목록의 내용 수집하기 수집하는 페이지에 연동되어 있는 href를 추출하여 href 주소에 있는 내용을 크롤링해보기. 이전의 실습들은 언론 …

+ 여기에 표시

Source: celltong.tistory.com

Date Published: 9/17/2021

View: 5032

다음 뉴스 기사 제목 본문 크롤링 후 텍스트 저장 – Good For Me

[파이썬 크롤링] 네이버 지식인에 올라온 질문 ‘다음 랭킹 뉴스 기사 제목 본문 크롤링 후 텍스트 파일에 저장하는 법’에 대해 파이썬으로 작성해 …

+ 더 읽기

Source: goodthings4me.tistory.com

Date Published: 9/19/2021

View: 1528

[Python/Requests/Beautifulsoup] 네이버 뉴스 기사 제목 크롤링 …

오늘은 네이버 뉴스에서 특정 키워드를 검색해서, 첫 페이지의 모든 기사들의 제목과 언론사를 크롤링 해보겠습니다. 우리의 목적은 지난 시간 배운 정적 …

+ 자세한 내용은 여기를 클릭하십시오

Source: coding-kindergarten.tistory.com

Date Published: 10/21/2022

View: 2191

[python] 원하는 검색어로 네이버 뉴스 크롤링하기(2)

그 함수의 객체를 만들어 구현하여 기사 제목, 본문을 가지고 올 수 있는 크롤러를 만들었습니다. 오늘의 포스팅은 코드 위주이니 코드가 왜 이렇게 …

+ 여기에 표시

Source: wonhwa.tistory.com

Date Published: 6/26/2022

View: 7641

주제와 관련된 이미지 뉴스 기사 크롤링

주제와 관련된 더 많은 사진을 참조하십시오 네이버 뉴스 X 파이썬(BeautifulSoup으로 네이버 뉴스기사 크롤링). 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

네이버 뉴스 X 파이썬(BeautifulSoup으로 네이버 뉴스기사 크롤링)
네이버 뉴스 X 파이썬(BeautifulSoup으로 네이버 뉴스기사 크롤링)

주제에 대한 기사 평가 뉴스 기사 크롤링

  • Author: 위대한 개스피 The Great GAESPI
  • Views: 조회수 3,647회
  • Likes: 좋아요 51개
  • Date Published: 2021. 6. 19.
  • Video Url link: https://www.youtube.com/watch?v=K5OnD860U1A

네이버 뉴스 기사 크롤링

네이버 뉴스에 접속하여, 원하는 키워드와 원하는 기간을 설정하여 나오는 모든 기사 검색 결과를 크롤링하는 방법입니다. 기사 타이틀, 기사 등록일, 언론사 및 정확하지는 않지만 기자 이름과 기자 이메일까지 가져옵니다 마지막으로 엑셀 및 csv로 저장합니다.

import requests from bs4 import BeautifulSoup import math import pandas import re resultList = [ ] url = “https://search.naver.com/search.naver?” params = { “where” : ‘news’ , “query” : ‘매틱 네트워크 스테이킹’ , “start” : 0 , } raw = requests . get ( url , headers = { ‘User-Agent’ : ‘Mozilla/5.0’ } , params = params ) html = BeautifulSoup ( raw . text , “html.parser” ) articles = html . select ( “ul.type01 > li” ) totalCount = html . select ( “div.section_head > div.title_desc > span” ) [ 0 ] . text . split ( ‘ / ‘ ) [ 1 ] [ : – 1 ] for i in range ( 0 , math . floor ( int ( totalCount ) / 10 ) + 1 ) ) : if i == 0 : params [ ‘start’ ] = i else : params [ ‘start’ ] = i * 10 + 1 raw = requests . get ( url , headers = { ‘User-Agent’ : ‘Mozilla/5.0’ } , params = params ) html = BeautifulSoup ( raw . text , “html.parser” ) articles = html . select ( “ul.type01 > li” ) for ar in articles : title = ar . select_one ( “a._sp_each_title” ) . text articleUrl = ar . find ( “a” ) [ “href” ] innerRaw = requests . get ( articleUrl , headers = { ‘User-Agent’ : ‘Mozilla/5.0’ } ) innerHtml = BeautifulSoup ( innerRaw . text , “html.parser” ) reporter = innerArticles = innerHtml ( text = re . compile ( “기자” ) ) reporterEmail = innerArticles = innerHtml ( text = re . compile ( “@” ) ) source = ar . select_one ( “span._sp_each_source” ) . text date = ar . select_one ( “dd.txt_inline” ) . text . split ( ” ” ) [ 1 ] res = { “title” : title , “company” : source , “url” : articleUrl , “date” : date , “reporter” : reporter , “reporterEmail” : reporterEmail } resultList . append ( res ) resultList . append ( { “totalCount” : totalCount } ) df = pandas . DataFrame ( resultList ) df . to_csv ( ‘blockChain_articles.csv’ ) df . to_excel ( ‘blockChain_articles.xlsx’ )

[2탄] 쉽게 따라하는 네이버 뉴스 크롤링(python)

“본 포스팅은 네이버 웹 크롤링 실제 python 코드를 작성하는 2탄입니다.

전 단계인 수행계획을 확인하고 싶으신 분들은 아래링크(1탄)을 참고해주세요 :)”

네이버 웹 페이지 구성이 바뀌어 내용, 코드 수정(2021.01.26)

지난 편에 이어 네이버 뉴스를 크롤링하는 python 코드를 작성하는 포스팅을 합니다.

지난 편은 네이버 뉴스 웹 구성 체계를 확인하여 원하는 정보(뉴스 기사 title, URL)의 위치를 확인하여 크롤링 계획을 수립하였고

본 편에서는 이를 python 코드로 작성하여 실제 수행해보려고 합니다.

서론

이에 앞서 지난 편을 간단히 정리하고 본 편에서 진행할 내용을 정리해봅니다.

<지난 편>

STEP 1. 소스 조사

제공 사이트 조사 제공 정보 조사 확보 가능 정보 확인

STEP 2. 웹 구성 체계 확인

HTML 구조 확인 제공 정보 확인 크롤링 가능 여부 확인

네이버 뉴스의 기사 URL의 형태 : https://search.naver.com/search.naver?where=news&sm=tab_jum&query=코로나 코로나를 키 위드로 검색 시

https://search.naver.com/search.naver?where=news&sm=tab_jum&query=코로나 네이버 뉴스 HTML 구성 (뉴스 title, URL을 찾을 시)

<본 편>

STEP 3. 크롤링 진행

parsing 방안 및 위치 확인 request 방법 확인 data 저장 형태 설계

STEP 4. 최종 데이터 생성

데이터 저장 형태 데이터 저장

이를 바탕으로 실제 수행하는 코드를 작성해보겠습니다

본론

STEP 3. 크롤링 진행

1. 필요 환경 및 패키지 설치

python 3 버전을 사용하였습니다.

requests, bs4, re, pandas 패키지를 사용하였습니다.

패키지 명 용도 requests 웹페이지 소스 추출(HTML) bs4 HTML 파싱, 필요 태그 및 소스 추출 re 조건부 문자열(정규 표현식), 태그 탐색 시 일반화 조건을 사용하기 위함 pandas 데이터 프레임, 엑셀 변환

2. 코드 작성

1. 패키지 importing

import requests from pandas import DataFrame from bs4 import BeautifulSoup import re from datetime import datetime import os

2. 현재 시간 저장

나중에 output으로 엑셀 저장 시 크롤링한 날짜, 시간을 파일명에 넣기 위해 저장하는 변수입니다.

date = str(datetime.now()) date = date[:date.rfind(‘:’)].replace(‘ ‘, ‘_’) date = date.replace(‘:’,’시’) + ‘분’

3. Input 생성

검색할 키워드, 추출할 뉴스 기사 수를 저장하는 변수입니다.

query에서 ‘ ‘ 를 ‘+’로 바꾸어주는 이유는 띄어쓰기 시 URL 조건 절에 ‘+’로 적용되어 요청 인자가 들어가기 때문입니다.

query = input(‘검색 키워드를 입력하세요 : ‘) query = query.replace(‘ ‘, ‘+’) news_num = int(input(‘총 필요한 뉴스기사 수를 입력해주세요(숫자만 입력) : ‘))

4. 요청할 URL 생성 및 요청

3번에서 받은 키워드(query)를 URL의 조건절 중 키워드에 해당하는 변수에 대응시켜 요청 URL을 만듭니다.

그리고 requests 패키지의 get함수를 이용하여 HTML 코드를 받아옵니다.

받은 코드를 bs4의 BeautifulSoup 함수를 이용하여 파싱합니다.

news_url = ‘https://search.naver.com/search.naver?where=news&sm=tab_jum&query={}’ req = requests.get(news_url.format(query)) soup = BeautifulSoup(req.text, ‘html.parser’)

받은 HTML 코드의 일부를 보면 다음과 같습니다.(req.text)

5. 원하는 정보를 담을 변수 생성(딕셔너리)

뉴스 기사 정보를 저장할 딕셔너리를 생성합니다. (key : 번호, value : 뉴스 기사 정보)

idx : 현재 뉴스의 번호

cur_page : 네이버 뉴스의 웹 페이지입니다. 추출하려는 기사 수가 현재 페이지에 있는 기사보다 많은 경우 다음 페이지로 넘어가야 하기 때문에 현 페이지 번호를 기억하도록 변수로 설정한 것입니다.

news_dict = {} idx = 0 cur_page = 1

6. parsing 한 HTML 코드에서 원하는 정보 탐색(뉴스 기사 title, URL)

idx(현재 뉴스 기사 번호)가 news_num(원하는 뉴스 기사 수) 보다 작은 동안 아래 코드를 실행합니다.

table : 뉴스 바운딩 박스(ul 태그)

li_list : 뉴스 바운딩 박스 안의 각 뉴스 기사(li 태그)

area_list : 뉴스 기사 안의 뉴스 제목, 본문이 담긴 태그(div 태그)

a_list : 각 뉴스기사 내부 title, URL 정보가 담긴 태그(a 태그)

news_dict : 뉴스 기사를 담는 딕셔너리 key : 뉴스 기사 번호 value : 뉴스 기사 title, url을 key로 하는 딕셔너리

next_page_url : 현재 수집한 뉴스 기사 수가 부족한 경우 다음 페이지로 넘어가야 하므로 다음 페이지에 해당하는 URL을 추출합니다. 형식은 div 태그이며 class 속성 값이 “sc_page_inner”입니다. 하위에 존재하는 a 태그 내부에 페이지 번호와, URL(href 속성 값) 정보가 있습니다. 위에서 언급한 cur_page 변수와 일치하는 페이지 번호의 URL을 가져옵니다.

print() print(‘크롤링 중…’) while idx < news_num: ### 네이버 뉴스 웹페이지 구성이 바뀌어 태그명, class 속성 값 등을 수정함(20210126) ### table = soup.find('ul',{'class' : 'list_news'}) li_list = table.find_all('li', {'id': re.compile('sp_nws.*')}) area_list = [li.find('div', {'class' : 'news_area'}) for li in li_list] a_list = [area.find('a', {'class' : 'news_tit'}) for area in area_list] for n in a_list[:min(len(a_list), news_num-idx)]: news_dict[idx] = {'title' : n.get('title'), 'url' : n.get('href') } idx += 1 cur_page += 1 pages = soup.find('div', {'class' : 'sc_page_inner'}) next_page_url = [p for p in pages.find_all('a') if p.text == str(cur_page)][0].get('href') req = requests.get('https://search.naver.com/search.naver' + next_page_url) soup = BeautifulSoup(req.text, 'html.parser') STEP 4. 최종 데이터 생성 7. 데이터 프레임 변환 및 저장 크롤링한 뉴스 정보가 담긴 딕셔너리(news_dict)를 데이터 프레임(news_df)으로 변환합니다. 그리고 크롤링한 키워드(query)와 크롤링 날짜(date)를 엑셀 파일 명으로 하여 저장합니다. 마지막으로 저장을 완료한 폴더를 띄웁니다. print('크롤링 완료') print('데이터프레임 변환') news_df = DataFrame(news_dict).T folder_path = os.getcwd() xlsx_file_name = '네이버뉴스_{}_{}.xlsx'.format(query, date) news_df.to_excel(xlsx_file_name) print('엑셀 저장 완료 | 경로 : {}\\{}'.format(folder_path, xlsx_file_name)) os.startfile(folder_path) 8. 결과물 결과물은 다음과 같습니다.(query : 코로나 강아지 산책, news_num : 17) 전체 코드 import requests from pandas import DataFrame from bs4 import BeautifulSoup import re from datetime import datetime import os date = str(datetime.now()) date = date[:date.rfind(':')].replace(' ', '_') date = date.replace(':','시') + '분' query = input('검색 키워드를 입력하세요 : ') news_num = int(input('총 필요한 뉴스기사 수를 입력해주세요(숫자만 입력) : ')) query = query.replace(' ', '+') news_url = 'https://search.naver.com/search.naver?where=news&sm=tab_jum&query={}' req = requests.get(news_url.format(query)) soup = BeautifulSoup(req.text, 'html.parser') news_dict = {} idx = 0 cur_page = 1 print() print('크롤링 중...') while idx < news_num: ### 네이버 뉴스 웹페이지 구성이 바뀌어 태그명, class 속성 값 등을 수정함(20210126) ### table = soup.find('ul',{'class' : 'list_news'}) li_list = table.find_all('li', {'id': re.compile('sp_nws.*')}) area_list = [li.find('div', {'class' : 'news_area'}) for li in li_list] a_list = [area.find('a', {'class' : 'news_tit'}) for area in area_list] for n in a_list[:min(len(a_list), news_num-idx)]: news_dict[idx] = {'title' : n.get('title'), 'url' : n.get('href') } idx += 1 cur_page += 1 pages = soup.find('div', {'class' : 'sc_page_inner'}) next_page_url = [p for p in pages.find_all('a') if p.text == str(cur_page)][0].get('href') req = requests.get('https://search.naver.com/search.naver' + next_page_url) soup = BeautifulSoup(req.text, 'html.parser') print('크롤링 완료') print('데이터프레임 변환') news_df = DataFrame(news_dict).T folder_path = os.getcwd() xlsx_file_name = '네이버뉴스_{}_{}.xlsx'.format(query, date) news_df.to_excel(xlsx_file_name) print('엑셀 저장 완료 | 경로 : {}\\{}'.format(folder_path, xlsx_file_name)) os.startfile(folder_path) 아쉬운 점 뉴스 본문까지 크롤링 가능하였다면 더 좋았을 것 같습니다. 추출한 뉴스 기사 URL로 다시 requests 요청을 보내고 받은 HTML 코드 내부에 기사 본문이 있기 때문에 현재 기술로는 충분히 가능합니다. 하지만, 각 언론사마다 웹페이지 구성이 다르기 때문에 본문의 정보를 담고 있는 태그의 위치와 이름 등이 상이하여 모든 언론사의 뉴스 본문 크롤링을 하기에는 더 많은 조사가 필요합니다. 만약 일부 언론사( ex. 매일 경제, 동아 일보, 중앙일보 )만 크롤링한다면 각 언론사 웹페이지 구성을 파악하고 본문의 위치를 확인한 후에 뉴스 크롤링 시 해당 언론사 URL만 남기고 본문 크롤링을 진행하면 될 것입니다. 마치며 최대한 이해가 쉽도록 주저리주저리 설명했는데.. 지루하게 느끼신 분들도 있을 것 같습니다. 긴 글 읽어주셔서 감사합니다. 피드백은 언제나 환영입니다~ ▼ 글이 도움이 되셨다면 아래 클릭 한번 부탁드립니다 🙂 ▼ 반응형

뉴스기사 목록의 내용 수집하기

반응형

뉴스기사 목록의 내용 수집하기

수집하는 페이지에 연동되어 있는 href를 추출하여 href 주소에 있는 내용을 크롤링해보기.

이전의 실습들은 언론 기사의 href만 크롤링했다면, 이번에는 각 기사의 내용까지 수집하는 것까지 실습.

사용 url : https://news.sbs.co.kr/news/newsflash.do?plink=GNB&cooper=SBSNEWS

출력 예시

[“href로 연결된 기사 내용1”, “href로 연결된 기사 내용2”, ——]

해야할 것

각 기사의 href를 리스트로 반환하는 get_href 함수를 올바르게 구현하기. get_href에서 얻은 각각의 href로 접근할 수 있는 기사의 내용을 추출하여 반환하는 crawling 함수 구현.

import requests from bs4 import BeautifulSoup def crawling(soup) : # soup 객체에서 추출해야 하는 정보를 찾고 반환 # 각각의 href 페이지에 들어있는 기사 내용을 반환 return None def get_href(soup) : # soup 객체에서 추출해야 하는 정보를 찾고 반환 # 상위 페이지에서의 href를 찾아 리스트로 반환 return None def main(): list_href = [] list_content = [] url = “https://news.sbs.co.kr/news/newsflash.do?plink=GNB&cooper=SBSNEWS” req = requests.get(url) soup = BeautifulSoup(req.text, “html.parser”) list_href = get_href(soup) print(list_href) for url in list_href : href_req = requests.get(url) href_soup = BeautifulSoup(href_req.text, “html.parser”) result = crawling(href_soup) list_content.append(result) print(list_content) if __name__ == “__main__”: main()

>>>

먼저, 크롬 개발자 도구로 SBS뉴스 웹 페이지의 HTML을 확인해보면, 기사목록에 있는 각 기사의 링크는 에 있고, 이 태그는

에 속해있어.

일단, 링크를 추출하는 것부터 코드 작성.

def get_href(soup) : # soup 객체에서 추출해야 하는 정보를 찾고 반환 # 상위 페이지에서의 href를 찾아 리스트로 반환 div = soup.find(“div”, class_=”w_news_list type_issue”) for a in div.find_all(“a”, class_=”news”): print(a[“href”])

실행해보니까 링크가 잘려서 나와. 그래서 “https://news.sbs.co.kr”를 앞에 붙여주고, 결과값들을 리스트 안에 넣어주기.

def get_href(soup) : # soup 객체에서 추출해야 하는 정보를 찾고 반환 # 상위 페이지에서의 href를 찾아 리스트로 반환 div = soup.find(“div”, class_=”w_news_list type_issue”) result = [] for a in div.find_all(“a”, class_=”news”): result.append(“https://news.sbs.co.kr” + a[“href”]) return result

그럼 이제, 기사의 내용들을 크롤링해볼 차례.

기사를 클릭해서 기사 전문 페이지로 넘어가 다시 개발자 도구로 HTML을 봐보면,

각 기사의 내용은

태그에 있음.

def crawling(soup) : # soup 객체에서 추출해야 하는 정보를 찾고 반환 # 각각의 href 페이지에 들어있는 기사 내용을 반환 div = soup.find(“div”, class_=”text_area”) print(div.get_text())

그러면 기사 목록에 있었던 10개의 기사의 내용이 하이퍼링크들 밑으로 쭉쭉쭉 나옴.

결과값들을 리스트에 넣는 것 까지 해보면

최종 코드는

import requests from bs4 import BeautifulSoup def crawling(soup) : # soup 객체에서 추출해야 하는 정보를 찾고 반환 # 각각의 href 페이지에 들어있는 기사 내용을 반환 div = soup.find(“div”, class_=”text_area”) result = div.get_text() return result def get_href(soup) : # soup 객체에서 추출해야 하는 정보를 찾고 반환 # 상위 페이지에서의 href를 찾아 리스트로 반환 div = soup.find(“div”, class_=”w_news_list type_issue”) result = [] for a in div.find_all(“a”, class_=”news”): result.append(“https://news.sbs.co.kr” + a[“href”]) return result def main(): list_href = [] list_content = [] url = “https://news.sbs.co.kr/news/newsflash.do?plink=GNB&cooper=SBSNEWS” req = requests.get(url) soup = BeautifulSoup(req.text, “html.parser”) list_href = get_href(soup) print(list_href) for url in list_href : href_req = requests.get(url) href_soup = BeautifulSoup(href_req.text, “html.parser”) result = crawling(href_soup) list_content.append(result) print(list_content) if __name__ == “__main__”: main()

728×90

반응형

다음 뉴스 기사 제목 본문 크롤링 후 텍스트 저장

[파이썬 크롤링] 네이버 지식인에 올라온 질문 ‘다음 랭킹 뉴스 기사 제목 본문 크롤링 후 텍스트 파일에 저장하는 법’에 대해 파이썬으로 작성해보았다.

다음 랭킹 뉴스 기사 제목, 본문 크롤링 후 텍스트 파일로 저장

[파이썬 소스 코드]

import requests from bs4 import BeautifulSoup import os def daum_news(): headers = {‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36′} url = f’https://news.daum.net/’ response = requests.get(url, headers=headers) if response.status_code == 200: # print(response.text) soup = BeautifulSoup(response.text, ‘html.parser’) lis = soup.find(‘ul’, class_=’list_newsissue’).find_all(‘li’) print(len(lis)) # 20 for li in lis: a_tag = li.select_one(‘div > div > strong > a’)[‘href’] title = li.select_one(‘div > div > strong > a’).text.strip().replace(‘ ‘, ”) print(a_tag, title) res = requests.get(a_tag, headers=headers) soup2 = BeautifulSoup(res.text, ‘html.parser’) summary = ” content = ” try: summary = soup2.find(‘strong’, {‘class’: ‘summary_view’}).text.strip() print(summary) except: summary = ‘요약 없음’ pass try: content = soup2.find(‘div’, id=’harmonyContainer’).text.strip() print(content) except: content = “기사 본문 없음” continue contents = ‘[기사 제목] ‘ + title + ‘

‘ + summary + ‘

‘ + content ## 기사 내용 저장 folder_name = f’./daum_news’ file_name = title[:15].strip() # 파일명에서 특수문자 제거 special_char = ‘\/:*?”<>|’ for c in special_char: if c in file_name: file_name = file_name.replace(c, ‘x’) if not os.path.exists(folder_name): os.makedirs(folder_name) with open(folder_name + ‘/’ + file_name + ‘.txt’, ‘w’, encoding=’utf-8′) as f: f.write(contents) # break else : print(response.status_code) daum_news()

저장할 폴더를 ‘daum_news’로 만들고 파일명은 기사 제목에서 15자까지 추출하여 사용하며, 제목에 특수문자가 있을 경우 저장이 안되는 오류를 방지하기 위해 특수문자를 제거해서 처리함

[실행 결과]

20 https://v.daum.net/v/20220601124604173 지상파 “대선 때 정확성 봤지? 이번 개표방송은 더 정확하게!” [6.1 지방선거]MBC, KBS, SBS 선거개표 방송 경쟁M “출구서 당선확률”, K “AR존 운영” S “3면+LED월” 한국방송 제공 선거날만 되면 방송사들은 또 다른 선거를 치른다. 바로 개표방송 대결. 플랫폼이 다양해면서 시청자를 붙들려는 방송사의 경쟁도 더욱 치열해 지고 있다. 방송사들은 8~9개월 전부터 선거방송기획팀을 조직해 프로그 램 구성에서 그래픽(CG)까지 모든 것을 체계적으로 준비한다. <에스비에 스>가 2017년 대통령 선거 때 미국드라마 <왕좌의 게임>에서 아이디어를 얻은 결과물이 화제를 모은 뒤부터는 개표방송에 거는 시청자의 기대도 점점 높아지고 있다. 오늘(1일) 실시된 ‘제8회 전국동시 지방선거’ 개표방송은 지난 대선에 이은 방송사들의 2차전이다. 이재명·안철수 전 대선 후보가 출마하는 등 여느 때보다 관심이 높아서 방송사들도 특히 공을 들였다. 이번 선거방송을 요약하자면 3사 모두 “정확성에 대한 자신”을 강조하고 있다. <문화방송>(MBC)은 “정통”, <한국방송>(KBS)는 “명품”, <에스비 에스>(SBS)는 “신박함”으로 구분 짓는 차이는 있지만, 지난 대선 때보다 도 “더 빠르고 정확해졌다”고 입을 모은다. 지난 대선 때 인정받은 지상 파 출구조사의 정확성과 신뢰성을 이번 선거방송에서 활용한 듯하다. < 문화방송> 쪽은 “지난 3월9일 진행된 대통령 선거방송 이후 3개월이 채 안 되는 짧은 기간 동안 역량을 총동원했다”고 말했다. . .

반응형

[Python/Requests/Beautifulsoup] 네이버 뉴스 기사 제목 크롤링을 통한 정적 수집 기초 정리

반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석, 머신러닝 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

[웹 크롤링 기초]

2021.03.22 – [파이썬 패키지/웹 크롤링] – [Python/웹 크롤링] 파이썬 웹 크롤링 기초 of 기초

2021.03.23 – [파이썬 패키지/웹 크롤링] – [Python/웹 크롤링] 크롬드라이버 크롬 버전에 맞춰서 설치하는법

2021.03.24 – [파이썬 패키지/웹 크롤링] – [Python/웹 크롤링] 파이썬 웹 크롤링 관련 패키지 3종 총정리

2021.03.27 – [파이썬 패키지/웹 크롤링] – [Python/웹 크롤링] 파이썬 웹 크롤링을 위한 속성 HTML, CSS 요약 정리

2021.03.28 – [파이썬 패키지/웹 크롤링] – [Python/웹 크롤링] 동적/정적 페이지 차이와 그에 따른 크롤링 방법 간단정리

[정적 웹크롤링]

2021.03.30 – [파이썬 패키지/웹 크롤링] – [Python/웹 크롤링] 파이썬 웹 크롤링 정적 수집 방법 개념 정리_find, find_all, select, select_one

2021.04.02 – [파이썬 패키지/웹 크롤링] – [Python/Requests/Beautifulsoup] 네이버 뉴스 기사 제목 크롤링을 통한 정적 수집 기초 정리

2021.04.06 – [파이썬 패키지/웹 크롤링] – [Python/Reuqests/Beautifulsoup] 파이썬 정적 웹크롤링 텍스트, 이미지, 하이퍼링크, 속성 가져오는 법

[동적 웹크롤링]

2021.04.03 – [분류 전체보기] – [코딩유치원] 네이버 뉴스 기사 제목 크롤링을 통한 동적 수집 기초 정리(selenium, beautifulsoup)

2021.06.21 – [파이썬 패키지/웹 크롤링] – [Python/Selenium] 파이썬 동적 웹크롤링 텍스트, 하이퍼링크, 이미지, 속성 가져오는 법

2021.05.22 – [파이썬 패키지/GUI 프로그램] – [파이썬 GUI 프로그래밍] 잡플래닛 리뷰 정보 크롤링 GUI 프로그램

오늘은 네이버 뉴스에서 특정 키워드를 검색해서, 첫 페이지의 모든 기사들의 제목과 언론사를 크롤링 해보겠습니다.

우리의 목적은 지난 시간 배운 정적 수집을 실전에서 사용해보면서 그 개념을 이해하는 것이 되겠습니다.

우선 코드는 아래와 같습니다.

#step1.프로젝트에 필요한 패키지 불러온다. from bs4 import BeautifulSoup as bs import requests #step2.크롤링할 url 주소를 입력한다. (네이버에서 코로나 검색 후, 뉴스 탭 클릭) url = ‘https://search.naver.com/search.naver?where=news&sm=tab_jum&query=코로나’ #step2-1.만약 다른 키워드를 매번 다르게 입력하고 싶다면 아래와 같이 하셔도 됩니다. query = input(‘검색할 키워드를 입력하세요: ‘) url = ‘https://search.naver.com/search.naver?where=news&sm=tab_jum&query=’+’%s’%query #step3.requests 패키지의 함수를 이용해 url의 html 문서를 가져온다. response = requests.get(url) html_text=response.text #step4.bs4 패키지의 함수를 이용해서 html 문서를 파싱한다. soup = bs(html_text, ‘html.parser’) #step5.bs4 패키지의 select_one 함수와 선택자 개념을 이용해서 뉴스기사 제목을 하나 가져온다. print(soup.select_one(‘a.news_tit’).get_text()) #step6.bs4 패키지의 select 함수와 선택자 개념을 이용해서 뉴스기사 제목을 모두 가져온다. titles = soup.select(‘a.news_tit’) for i in titles: title = i.get_text() print(title)

정적 수집에서 다른 부분은 항상 같지만 step2의 url 주소와 step5, 6의 선택자 개념은 웹 사이트마다 다르니 조금 더 자세히 살펴보겠습니다.

<원하는 사이트 url 주소 얻기>

먼저 크롬 브라우저를 켜서 네이버를 들어가줍니다. 그 다음 검색하고자 하는 키워드를 입력해주겠습니다. 저는 코로나를 검색해보았습니다. 검색하신 후에 뉴스 탭을 클릭하시면 위와 같은 url 주소가 나옵니다. 이 주소를 코딩하실 때 url(변수)에 넣어주시면 되겠습니다.

<원하는 정보 콕 찝어서 크롤링하기>

우리가 궁극적으로 목표하는 것은 특정 웹 페이지에 들어가서 원하는 정보를 쏙쏙 가져오는 것입니다. 그 방법에 대해서 알아보겠습니다.

1. 원하는 페이지에 접속한 후, F12를 눌러줍니다. (꼭 크롬 브라우저여야 합니다.)

2. 그러면 위와 같이 화면 우측에 html 정보가 쭉 뜰텐데요. 빨간색으로 표시된 화살표 아이콘을 눌러서, 화면에서 원하는 정보(글 혹은 사진)가 있는 곳을 찍어보겠습니다. 그러면 아래와 같이 html이 바뀌는 것을 확인 할 수 있습니다.

3. 화면 오른쪽에 해당 부분의 html 코드가 표시되는 것을 볼수 있습니다. 조금 더 자세히 보면 태그 안에 class=”news_tit”라고 적혀있는데, 이 class라는 것은 css로 html의 태크를 꾸며줄 때, 태그를 특정지어서 꾸며줄 수 있도록 속성명을 정해놓은 것이라 생각하시면 됩니다. 참고로 네이버 뉴스의 경우 한 페이지에 10개의 제목(class=”news_tit”)가 있습니다.

4. 지난 시간 배웠던 CSS Selector(선택자) 개념과 select_one 함수를 이용해서, 가장 첫 기사의 제목만 가져오는 코드는 아래와 같습니다.

여기서 get_text()라는 함수가 나오는데, 이는 하나의 html안에 있는 텍스트를 가져오는 기능을 합니다.

print(soup.select_one(‘a.news_tit’).get_text()) <결과> [속보] 코로나 백신 접종자 중 60명 확진…AZ 56명·화이자 4명

5. html 문서에서 가장 처음 나오는 것을 하나만 선택하는 select_one( ) 함수와 다르게 모든 html 태그를 선택하는 select( ) 함수를 사용하면 페이지에 존재하는 10개의 기사 제목을 모두 가져올 수 있습니다. 결과를 보니 그 사이에 기사가 더 나왔네요.

titles = soup.select(‘a.news_tit’) for i in titles: title = i.get_text() print(title) <결과> 정총리 “코로나 4차유행 초입 아닌지 걱정…위태로운 상황” ‘확진 직원 접촉’ 권칠승 중기부 장관, 코로나19 ‘음성’ 판정 [속보] 코로나 백신 접종자 중 60명 확진…AZ 56명·화이자 4명 [속보] 558명 신규 확진…’코로나19′ 사흘 연속 500명대 [단독]”코로나 감염시 책임져라”…서강대 기숙사 ‘외출 서약’ 논란 고3 학생·교사 ‘코로나 백신’ 접종…”여름방학에 화이자 예정”(종합) 코로나19 백신 우리 동네에서 맞을 수 있다 학교 안 가서? ‘코로나 블루’ 청소년만 피해 갔다 코로나19 어제 558명 신규 확진…사흘 연속 5백 명대 [단독] 코로나 앞에서 속수무책…투자자들 “150억 날릴 판”

제가 자주 했던 실수가 있는데요. 바로 select로 찾은 결과에 바로 get_text( ) 함수를 적용한 것입니다. 위의 코드에서 titles는 리스트 형식으로 10개의 html 정보가 들어있습니다. get_text( ) 함수는 반드시 1개의 html 태그에만 사용할 수 있으니, 꼭 for문으로 하나하나씩 가져오시는 것 기억해두세요!

오늘 준비한 내용은 여기까지입니다. 다음 시간에는 동적 페이지를 제어해서 수집하는 동적 수집에 대해서 배워보겠습니다.

고생 많으셨습니다.

반응형

[python] 원하는 검색어로 네이버 뉴스 크롤링하기(2)

반응형

오늘은 저번에 올린 네이버 뉴스 크롤링(1)에서 한 단계 업그레이드된 뉴스 크롤러를 공유하려 합니다 🙂

1편에서는 뉴스 1페이지만 크롤링을 할 수 있었는데요

2편에서는 여러 페이지를 크롤링 할 수 있는 코드를 구현하여 보았습니다!

반복적인 작업이 있는 부분을 함수로 만들고

그 함수의 객체를 만들어 구현하여 기사 제목, 본문을 가지고 올 수 있는 크롤러를 만들었습니다.

오늘의 포스팅은 코드 위주이니 코드가 왜 이렇게 나왔는지 자세한 설명이 필요하시다면 (1) 편을 확인해 주세요 🙂

step1. 크롤링 시 필요한 라이브러리 불러오기

#크롤링시 필요한 라이브러리 불러오기 from bs4 import BeautifulSoup import requests

step 2. 반복적인 작업 함수화하기

반복적인 작업들을 def를 이용해 함수를 만들어 보겠습니다.

(1) 입력받은 페이지 url 형식에 맞추어 숫자를 바꿔주는 함수

# 페이지 url 형식에 맞게 바꾸어 주는 함수 만들기 #입력된 수를 1, 11, 21, 31 …만들어 주는 함수 def makePgNum(num): if num == 1: return num elif num == 0: return num+1 else: return num+9*(num-1)

(2) Naver news url 생성하는 함수

# 크롤링할 url 생성하는 함수 만들기(검색어, 크롤링 시작 페이지, 크롤링 종료 페이지) def makeUrl(search,start_pg,end_pg): if start_pg == end_pg: start_page = makePgNum(start_pg) url = “https://search.naver.com/search.naver?where=news&sm=tab_pge&query=” + search + “&start=” + str(start_page) print(“생성url: “,url) return url else: urls= [] for i in range(start_pg,end_pg+1): page = makePgNum(i) url = “https://search.naver.com/search.naver?where=news&sm=tab_pge&query=” + search + “&start=” + str(page) urls.append(url) print(“생성url: “,urls) return urls

(3) html에서 원하는 속성 값 추출해주는 함수

# html에서 원하는 속성 추출하는 함수 만들기 (기사, 추출하려는 속성값) def news_attrs_crawler(articles,attrs): attrs_content=[] for i in articles: attrs_content.append(i.attrs[attrs]) return attrs_content

(4) 뉴스 기사 내용 크롤링하는 함수

#뉴스기사 내용 크롤링하는 함수 만들기(각 뉴스의 url) def news_contents_crawler(news_url): contents=[] for i in news_url: #각 기사 html get하기 news = requests.get(i) news_html = BeautifulSoup(news.text,”html.parser”) #기사 내용 가져오기 (p태그의 내용 모두 가져오기) contents.append(news_html.find_all(‘p’)) return contents

(5) 뉴스기사 크롤러(main) 함수

#html생성해서 기사크롤링하는 함수 만들기(제목,url): 3개의 값을 반환함(제목, 링크, 내용) def articles_crawler(url): #html 불러오기 original_html = requests.get(i) html = BeautifulSoup(original_html.text, “html.parser”) # 검색결과 articles = html.select(“div.group_news > ul.list_news > li div.news_area > a”) title = news_attrs_crawler(articles,’title’) url = news_attrs_crawler(articles,’href’) content = news_contents_crawler(url) return title, url, content #3개의 값을 반환

step3. 함수를 이용하여 뉴스 크롤링 하기

#뉴스크롤링 시작 #검색어 입력 search = input(“검색할 키워드를 입력해주세요:”) #검색 시작할 페이지 입력 page = int(input(”

크롤링할 시작 페이지를 입력해주세요. ex)1(숫자만입력):”)) # ex)1 =1페이지,2=2페이지… print(”

크롤링할 시작 페이지: “,page,”페이지”) #검색 종료할 페이지 입력 page2 = int(input(”

크롤링할 종료 페이지를 입력해주세요. ex)1(숫자만입력):”)) # ex)1 =1페이지,2=2페이지… print(”

크롤링할 종료 페이지: “,page2,”페이지”) # naver url 생성 url = makeUrl(search,page,page2) #뉴스 크롤러 실행 news_titles = [] news_url =[] news_contents =[] for i in url: title, url,content = articles_crawler(url) news_titles.append(title) news_url.append(url) news_contents.append(content) print(“검색된 기사 갯수: 총 “,(page2+1-page)*10,’개’) print(”

[뉴스 제목]”) print(news_titles) print(”

[뉴스 링크]”) print(news_url) print(”

[뉴스 내용]”) print(news_contents)

[결과]

중략…

중략…

중략…..

이렇게 각각 뉴스 제목, 링크, 내용이 각각 출력됨을 확인 가능합니다 ㅎㅎ

크롤링할 페이지가 많을수록 시간이 오래 걸린 다는 점 참고해주세요 🙂

step4. 데이터 프레임으로 만들기

이제 이 데이터들을 데이터 프레임으로 만들어 보도록 하겠습니다!

데이터 프레임으로 만들기 전에 내용을 보니 리스트가 [[]] 이런 식으로 중첩으로 되어서 저장되어 있기 때문에

한 개의 기사의 한 개의 제목, 링크, 내용을 할당하기 위해 for문을 사용하여 1차원리스트로 변경해 주겠습니다.

makeList라는 함수를 만들어 간편하게 변경해 주도록 하겠습니다.

###데이터 프레임으로 만들기### import pandas as pd #제목, 링크, 내용 1차원 리스트로 꺼내는 함수 생성 def makeList(newlist, content): for i in content: for j in i: newlist.append(j) return newlist #제목, 링크, 내용 담을 리스트 생성 news_titles_1, news_url_1, news_contents_1 = [],[],[] #1차원 리스트로 만들기(내용 제외) makeList(news_titles_1,news_titles) makeList(news_url_1,news_url) makeList(news_contents_1,news_contents) #데이터 프레임 만들기 news_df = pd.DataFrame({‘title’:news_titles_1,’link’:news_url_1,’content’:news_contents_1}) news_df

출력:

이런 식으로 데이터 프레임이 만들어졌습니다.

중간에 내용이 빈 칸은 사이트가 iframe으로 되어 있거나 할 것 같네요.

내용도 다 채우고 싶다면 한 사이트의 기사들만 추출하는 것이 깔끔합니다.

때문에 나는 더 깔끔하게 기사 내용을 추출하고 싶다! 하시는 분들은

1편의 내용을 참고하여 본인이 크롤링 하고 싶은 사이트만 전문으로 크롤링하는 코드를 만들어도 좋을 것 같습니다 .

전체 코드

#크롤링시 필요한 라이브러리 불러오기 from bs4 import BeautifulSoup import requests # 페이지 url 형식에 맞게 바꾸어 주는 함수 만들기 #입력된 수를 1, 11, 21, 31 …만들어 주는 함수 def makePgNum(num): if num == 1: return num elif num == 0: return num+1 else: return num+9*(num-1) # 크롤링할 url 생성하는 함수 만들기(검색어, 크롤링 시작 페이지, 크롤링 종료 페이지) def makeUrl(search,start_pg,end_pg): if start_pg == end_pg: start_page = makePgNum(start_pg) url = “https://search.naver.com/search.naver?where=news&sm=tab_pge&query=” + search + “&start=” + str(start_page) print(“생성url: “,url) return url else: urls= [] for i in range(start_pg,end_pg+1): page = makePgNum(i) url = “https://search.naver.com/search.naver?where=news&sm=tab_pge&query=” + search + “&start=” + str(page) urls.append(url) print(“생성url: “,urls) return urls # html에서 원하는 속성 추출하는 함수 만들기 (기사, 추출하려는 속성값) def news_attrs_crawler(articles,attrs): attrs_content=[] for i in articles: attrs_content.append(i.attrs[attrs]) return attrs_content #뉴스기사 내용 크롤링하는 함수 만들기(각 뉴스의 url) def news_contents_crawler(news_url): contents=[] for i in news_url: #각 기사 html get하기 news = requests.get(i) news_html = BeautifulSoup(news.text,”html.parser”) #기사 내용 가져오기 (p태그의 내용 모두 가져오기) contents.append(news_html.find_all(‘p’)) return contents #html생성해서 기사크롤링하는 함수 만들기(제목,url): 3개의 값을 반환함(제목, 링크, 내용) def articles_crawler(url): #html 불러오기 original_html = requests.get(i) html = BeautifulSoup(original_html.text, “html.parser”) # 검색결과 articles = html.select(“div.group_news > ul.list_news > li div.news_area > a”) title = news_attrs_crawler(articles,’title’) url = news_attrs_crawler(articles,’href’) content = news_contents_crawler(url) return title, url, content #3개의 값을 반환 #####뉴스크롤링 시작##### #검색어 입력 search = input(“검색할 키워드를 입력해주세요:”) #검색 시작할 페이지 입력 page = int(input(”

크롤링할 시작 페이지를 입력해주세요. ex)1(숫자만입력):”)) # ex)1 =1페이지,2=2페이지… print(”

크롤링할 시작 페이지: “,page,”페이지”) #검색 종료할 페이지 입력 page2 = int(input(”

크롤링할 종료 페이지를 입력해주세요. ex)1(숫자만입력):”)) # ex)1 =1페이지,2=2페이지… print(”

크롤링할 종료 페이지: “,page2,”페이지”) # naver url 생성 url = makeUrl(search,page,page2) #뉴스 크롤러 실행 news_titles = [] news_url =[] news_contents =[] for i in url: title, url,content = articles_crawler(url) news_titles.append(title) news_url.append(url) news_contents.append(content) print(“검색된 기사 갯수: 총 “,(page2+1-page)*10,’개’) print(”

[뉴스 제목]”) print(news_titles) print(”

[뉴스 링크]”) print(news_url) print(”

[뉴스 내용]”) print(news_contents) ###데이터 프레임으로 만들기### import pandas as pd #제목, 링크, 내용 1차원 리스트로 꺼내는 함수 생성 def makeList(newlist, content): for i in content: for j in i: newlist.append(j) return newlist #제목, 링크, 내용 담을 리스트 생성 news_titles_1, news_url_1, news_contents_1 = [],[],[] #1차원 리스트로 만들기(내용 제외) makeList(news_titles_1,news_titles) makeList(news_url_1,news_url) makeList(news_contents_1,news_contents) #데이터 프레임 만들기 news_df = pd.DataFrame({‘title’:news_titles_1,’link’:news_url_1,’content’:news_contents_1}) news_df

코드 파일

naver_news_crawler.ver1.0.ipynb 0.98MB

마무리

1편에서 좀 더 업그레이드된 크롤러를 만들어 보았는데요

궁금한 사항이나 크롤러 업그레이드에 대한 좋은 의견이 있으시다면

댓글 남겨주세요 ^o^

제 코드가 도움이 되길 바랍니다.ㅎㅎ

+ 최신 버전을 확인하고 싶다면??

https://wonhwa.tistory.com/46?category=996518

위의 게시물을 방문해 주세요:)

반응형

키워드에 대한 정보 뉴스 기사 크롤링

다음은 Bing에서 뉴스 기사 크롤링 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 네이버 뉴스 X 파이썬(BeautifulSoup으로 네이버 뉴스기사 크롤링)

  • 동영상
  • 공유
  • 카메라폰
  • 동영상폰
  • 무료
  • 올리기

네이버 #뉴스 #X #파이썬(BeautifulSoup으로 #네이버 #뉴스기사 #크롤링)


YouTube에서 뉴스 기사 크롤링 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 네이버 뉴스 X 파이썬(BeautifulSoup으로 네이버 뉴스기사 크롤링) | 뉴스 기사 크롤링, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

Leave a Comment