-
주요 게임 매체 스크랩하기(bs4 활용)코딩 및 데이터분석/웹크롤링 2023. 7. 26. 00:04
각 기사 옆에 'Summary'라는 이름으로 본문 세 줄 요약까지 해버리고 싶은데, 아직 초보라 방법을 모르겠다.
그리고 이 결과로 만든 xlsx파일을 컴퓨터로 봐봤자 의미가 없기 때문에 모바일로도 간편하게 받아보고 싶은데... 이 역시 방법을 모르겠다.
GPT 선생이 없었으면 혼자 힘으로는 절대 이 코드를 얻지 못했을 것이다.
AI란 정말 신묘하다.
앞으로 해외 매체들도 추가해볼 생각이다.
각 매체 별로 기사 탭에 들어가면 제일 먼저 보이는 메인 페이지에 노출된 기사의 제목, 링크만 10~20개 정도 추출하는 것이라, 아마 각 홈페이지에 이 스크랩으로 인한 부담은 없을 것이라고 생각한다.
버전
2023.8.10 GameDeveloper 비즈니스 섹션 추가 import requests import pandas as pd from bs4 import BeautifulSoup from datetime import datetime
# 인벤 url = 'https://www.inven.co.kr/webzine/news/?hotnews=1' html = requests.get(url) soup = BeautifulSoup(html.content, 'html.parser') # 빈 리스트 만들기 titles = [] links = [] date_times = [] # 뉴스 제목, 링크 등 정보 담고 있는 영역 content_divs = soup.find_all('div', class_='content') # 하위 영역에서 각 요소 찾기 for content_div in content_divs: # 제목 title_element = content_div.find('span', class_='title').text titles.append(title_element) # 링크 link_element = content_div.find('a', href=True) link = link_element['href'] links.append(link) # 날짜 date_time_element = content_div.find('span', class_='info').text date_time = date_time_element.split('|')[-1].strip() date_times.append(date_time) data = { 'Title': titles, 'Date': date_times, 'Link': links } # df로 만들고, 인덱스 및 컬럼 정리 inven_df = pd.DataFrame(data) inven_df.insert(0, 'Media', '인벤') inven_df.index=inven_df.index+1 # URL이 자꾸 짤려서 너비를 키움 pd.set_option('max_colwidth', 200) inven_df # 디스이즈게임 pd.set_option('max_colwidth', 200) url = 'https://www.thisisgame.com/webzine/news/nboard/263/' html = requests.get(url) soup = BeautifulSoup(html.content, 'html.parser') tig_data = [] for titles in soup.find_all(class_='subject'): link_tag = titles.a if link_tag and 'href' in link_tag.attrs: link = link_tag['href'] link = 'https://www.thisisgame.com/webzine/news/nboard/263/' + link date_tag = titles.find_next('span', class_='date') date = date_tag.text.strip() if date_tag else None tig_data.append({"Title": link_tag.text, "Date": date, "Link": link}) df = pd.DataFrame(tig_data) df.insert(0, 'Media', '디스이즈게임') df.index=df.index+1 tig_df=df # 게임메카 pd.set_option('max_colwidth', 200) url = 'https://www.gamemeca.com/news.php' html = requests.get(url) soup = BeautifulSoup(html.content, 'html.parser') mecca_data = [] for titles in soup.find_all(class_=['tit_thumb', 'tit_thumb_h']): link_tag = titles.a if link_tag and 'href' in link_tag.attrs: link = link_tag['href'] link = 'https://www.gamemeca.com' + link date_tag = titles.find_next(class_='day_news') date = date_tag.text.strip() if date_tag else None mecca_data.append({"Title": link_tag.text, "Date": date, "Link": link}) df = pd.DataFrame(mecca_data) df.insert(0, 'Media', '게임메카') df.index=df.index+1 mecca_df=df # 중국 17173 매체 pd.set_option('max_colwidth', 200) url = 'http://news.17173.com/' html = requests.get(url) soup = BeautifulSoup(html.content, 'html.parser') yiqi_data = [] for titles in soup.find_all(class_='tit'): link_tag = titles.a if link_tag and 'href' in link_tag.attrs: link = link_tag['href'] date_tag = titles.find_next(class_='ico ico-date') date = date_tag.text.strip() if date_tag else None yiqi_data.append({"Title": link_tag.text, "Date": date, "Link": link}) df = pd.DataFrame(yiqi_data) df.insert(0, 'Media', '17173') df.index=df.index+1 yiqi_df=df # gamedeveloper.com/business 섹션 pd.set_option('max_colwidth', 200) url = 'https://www.gamedeveloper.com/business' html = requests.get(url) soup = BeautifulSoup(html.content, 'html.parser') gd_data = [] # 기사 목록 추출 articles = soup.find_all('div', class_='topic-content-article') # 각 기사 정보 추출 for article in articles: # 기사 제목 추출 article_title = article.find('span', class_='article-title').text # 기사 링크 추출 article_link = article.find('a', class_='article-edge-wrap')['href'] # 기사 날짜 추출 article_date = article.find('div', class_='arcile-date').text gd_data.append({"Title": article_title, "Date": article_date, "Link": article_link}) df = pd.DataFrame(gd_data) df.insert(0, 'Media', 'GameDeveloper') df.index=df.index+1 gd_df=df #엑셀 각 시트로 추출 file_name="{}_주요 게임매체 기사.xlsx".format(datetime.now().strftime('%y%m%d')) with pd.ExcelWriter(file_name) as writer: inven_df.to_excel(writer, sheet_name='인벤', index=True) tig_df.to_excel(writer, sheet_name='디스이즈게임', index=True) mecca_df.to_excel(writer, sheet_name='게임메카', index=True) yiqi_df.to_excel(writer, sheet_name='17173', index=True) gd_df.to_excel(writer, sheet_name='GameDeveloper', index=True)
'코딩 및 데이터분석 > 웹크롤링' 카테고리의 다른 글
주요 게임사 뉴스_키워드 출현 빈도순 정렬 (0) 2023.06.28