오음

python) 네이버 기사제목,내용 크롤링 본문

데이터 엔지니어링/크롤링

python) 네이버 기사제목,내용 크롤링

오준돌 2023. 3. 9. 16:54

네이버 스포츠에서 이시각 많이 본 뉴스의 제목과 내용을 크롤링

# 필요한 패키지 import
from bs4 import BeautifulSoup 
from selenium.webdriver.common.by import By
from selenium import webdriver
import re

# 네이버 스포츠 인기뉴스 url로 데이터 get
driver = webdriver.Chrome()
news_url = "https://sports.news.naver.com/wfootball/news/index?isphoto=N&type=popular"
driver.get(news_url)

# 이시각 많이 본 뉴스들의 url주소 가져오기
# "div"태그 , class_='text'['href']
bs = BS(driver.page_source)
newurl = bs.findAll("a" , class_ = 'title')

# 이시각 뉴스 url주소 필요한 부분 가져오기 네이버 스포츠뉴스 url은 oid와 aid가 주어짐 / [https://sports.news.naver.com/news?{i}] i부분
url_list = []
for i in newurl:
    url_list.append(i['href'].split('?')[1])
url_list = url_list[1:-4]
url_list

get방식으로 불러올 필요한 url주소의 일부를 가져온다.

 

# 순위 안에 있는 기사제목 내용 크롤링하기
driver = webdriver.Chrome()

for i in url_list:
    news_url = f"https://sports.news.naver.com/news?{i}"
    driver.get(news_url)
    
    time.sleep(2)
    
    bs = BS(driver.page_source)
    title = bs.find("h4",class_='title').text
    text = bs.find("div",id="newsEndContents")
    
    # 기사 밑부분 필요없는 부분 빼고 기사 내용 찾기
    for x in text.children:
        type(x)
    type_test= type(x) 
    newstext = " ".join([x.strip() for idx, x in enumerate(text.children) if type(x) == type_test]) 
    
    # 저장못하는 상용문자들 제거
    title = re.sub("[\/:*?\"<>|]", "", title)
    
    # 폴더 안에 title.text -> text 저장하기
    with open(f"./news/{title}.txt",'w',encoding='utf-8-sig') as f:
        f.write(newstext)

기사 제목과 내용을 불러와서 새로만든 news 폴더 안에 txt로 저장하기

# 폴더안에 모든 file제목과 file 내용 DataFrame 만들기
import os
import pandas as pd
title = [] 
for i in os.listdir('./news'):
    title.append(i.split(".")[0])
text = []
for i in os.listdir("C:/workspace/news"):
    with open("C:/workspace/news/{}".format(i),"r",encoding="utf-8-sig") as f:
        text .append(f.read())

# 데이터 프레임으로 만들기  
news_df = pd.DataFrame({'title':title,'text':text})
news_df

폴더 내 텍스트 파일 여러개 읽기

'데이터 엔지니어링 > 크롤링' 카테고리의 다른 글

멜론 크롤링  (0) 2023.10.13
python) requests 활용 스타벅스 크롤링  (0) 2023.03.06