개발/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