개발/ETC

[python] 중앙일보 크롤링

wonpick 2021. 6. 27. 20:48

하나도 정리되지 않은... 코드

기간,키워드,최신순, 분야 고정시켜놓고 기사 전문을 가져오는 코드이다!

RESULT_PATH = '경로'
now = datetime.now() #파일이름 현 시간으로 저장하기

def get_url():
    params =[]

    for page in tqdm(range(50)): #일부분만 기간,키워드,최신순, 분야 고정
    
        url2 = f'https://news.joins.com/Search/TotalNews?page={page}&Keyword=%EC%B2%AD%EB%85%84&PeriodType=DirectInput&StartSearchDate=01%2F01%2F1987%2000%3A00%3A00&EndSearchDate=12%2F31%2F2020%2000%3A00%3A00&SortType=New&SourceGroupType=Joongang&ServiceCode=17&SearchCategoryType=TotalNews'
        url = urllib.request.Request(url2) 
        res = urllib.request.urlopen(url).read().decode("utf-8") 
        soup = BeautifulSoup(res, "html.parser") 
        for link in soup.find_all(class_="headline mg"): 
            for i in link: 
                params.append(i.get('href')) # 신문자 URL 
    return params 

def fetch_list_url2(): 
    params3 = [] 
    list_url = get_url() 
     
    f = open(RESULT_PATH+'ydata3.txt', 'w', encoding='UTF-8')
    
    for i in range(len(list_url)): 
        url = urllib.request.Request(list_url[i]) 
        res = urllib.request.urlopen(url).read().decode("utf-8") 
        soup = BeautifulSoup(res, "html.parser") 
        
        news_contents=[]
        
        # 날짜 가져오기
        pdate = soup.select('em')[1].get_text()[3:13]
        news_contents.append(pdate)

        # 언론명 가져오기
        newss = soup.select('em')[0].get_text()[1:5]
        news_contents.append(newss)
        
        #섹션
        news_contents.append('문화')
        
        # 제목
        title = soup.select('h1#article_title')[0].text  #대괄호는  h3#articleTitle 인 것중 첫번째 그룹만 가져오겠다.
        news_contents.append(title)


        #본문
        _text = soup.select('#article_body')[0].get_text().replace('\n', " ")
        news_contents.append(_text.strip())
        
        #링크
        news_contents.append(list_url[i])
        #print(news_contents)
        f.write("{}\t{}\t{}\t{}\t{}\t{}\n".format(news_contents[0], news_contents[1], news_contents[2], news_contents[3],news_contents[4],news_contents[5]))  # new style
    
    f.close()
    return news_contents
        

def excel_make():
    data = pd.read_csv(RESULT_PATH+'ydata3.txt', sep='\t',header=None, error_bad_lines=False)
    data.columns = ['date','news','section','title','contents','link'] 
    #print(data)
    xlsx_outputFileName = '%s-%s-%s %s시 %s분 %s초 result.xlsx' % (now.year, now.month, now.day, now.hour, now.minute, now.second)
    xlsx_name = 'result' + '.xlsx'
    data.to_excel(RESULT_PATH+xlsx_outputFileName, encoding='utf-8')


def main():
    fetch_list_url2() #검색된 네이버뉴스의 기사내용을 크롤링합니다. 
    excel_make() #엑셀로 만들기 
main()


참고 자료

https://bumcrush.tistory.com/155

https://adsp-ggini.tistory.com/80

 

[python] beautifulsoup을 이용해 네이버 뉴스 전체를 크롤링을 해보자! (네이버 뉴스 크롤링 2)

[python] beautifulsoup을 이용해 네이버 뉴스 전체를 크롤링을 해보자!  (네이버 뉴스 크롤링 2) *본 포스팅은 개인 학습용으로 만든 크롤러라 완벽한 코드가 아닌 점 알려드립니다. 오늘은 네

bumcrush.tistory.com

 

[크롤링]네이버 뉴스 검색 후, 크롤링(제목, 내용요약, 언론사 등)

아마 이 글을 클릭하고 들어온 사람은 파이썬 초보일 것이다. 크롤링을 알기전에 몇가지 알아야 할 부분이 있다. 첫번째, 너무 오래된 블로그의 크롤링 소스는 가져와봤자 무용지물이다. 예를

adsp-ggini.tistory.com