๐ ํฌ๋กค๋ง ๋ถ์ ํ๋ก์ ํธ
โ ์ฃผ์ : ๋ด์ค,๊ธฐ์ฐจํ,๊ด๊ด์ํ ๋ฆฌ๋ทฐ๋ฑ ๋ค์ํ ์นํ์ด์ง ํฌ๋กค๋ง์ ํตํด ๋ฐ์ดํฐ ์์ง ๋ฐ ๋ถ์
โ ๋ฐฐ๊ฒฝ : html ๊ตฌ์กฐ์ ๋ํด ์ตํ๊ณ ์น ํฌ๋กค๋ง์ ํตํ ๋ฐ์ดํฐ ์์ง๊ณผ ๋ถ์
โ ๊ธฐ๊ฐ : 2024.05.04~2024.05.11 (์ฝ 1์ฃผ)
โ ๊ณผ์ : ํ์ด์ฌ์ผ๋ก ์น์ฌ์ดํธ ํฌ๋กค๋ง
๋ด์ค ํฌ๋กค๋ง ์๋
์๋งค ๊ฐ๋ฅํ ๊ธฐ์ฐจํ ์ฐพ๊ธฐ
๊ด๊ด ์ํ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ ํฌ๋กค๋ง ๋ฐ ๋ถ์
โ ์คํฌ : ํ์ด์ฌ
ํ๋ก์ ํธ ๋ฐฐ๊ฒฝ
์น ํฌ๋กค๋ง์ ํตํด ๋ค์ํ ๋ฐ์ดํฐ ์์ง์ด ๊ฐ๋ฅํ๋ฏ๋ก, ๋ฆฌ์์น ์ญ๋์ ํค์ฐ๊ธฐ ์ํด ํฌ๋กค๋ง์ ๊ณต๋ถํ๊ณ ์ ํจ
์ ์ ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์์งํ์ฌ ๊ฐ๊ณตํ๋ ์ญ๋์ ํค์ฐ๊ณ ์ ์์
์ ๋ชฉ ํฌ๋กค๋ง
kbs ๋ด์ค ํํ์ด์ง์ ๋ค์ด๊ฐ์ ๋ถ์ผ๋ณ ๋ด์ค๋ฅผ ์ ํํฉ๋๋ค.
์ด ๊ฒ์๊ธ์ ์์ฑํ๋ฉด์ ์ฝ๋์ ๋ํ ํด์ค์ ์ ์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์
ํ๋ก์ ํธ ํ ๋น์์๋ 5์ ๊ธฐ์ฌ์์ง๋ง, ์ต์ ๋ด์ค๋ก ์ ๋ฐ์ดํธ ํด์ ์์ฑํ๊ฒ ์ต๋๋ค.
# ๋ด์ค 1๊ฐ ํฌ๋กค๋ง
url = 'https://news.kbs.co.kr/news/pc/view/view.do?ncd=8083891'
html_doc=requests.get(url).text
html_doc
soup=BeautifulSoup(html_doc,'html.parser')
# ์นํ์ด์ง์ ๊ตฌ์กฐ๋ฅผ ์ด๋ ค soup ๋ผ๋ ๊ณณ์ ์ ์ฅ
title1=soup.find('h4',class_='headline-title')
title1.text
soup.find ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ์ํ๋ ๋ถ๋ถ๋ง์ ๊ฐ์ ธ์ฌ์ ์์ต๋๋ค.
์ ๋ 'h4'๋ฅผ ํํ์ฌ ์ ๋ชฉ๋ง ๊ฐ์ ธ์์ต๋๋ค.
๋ณธ๋ฌธ ํฌ๋กค๋ง
์ด์ ๋ณธ๋ฌธ์ ๊ฐ์ ธ์ค๊ฒ ์ต๋๋ค.
F12 ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ํตํด ๋ณธ๋ฌธ์ ํด๋นํ๋ ๋ถ๋ถ์ด div์ด๊ณ class๊ฐ detail-body font-size์์ ํ์ธํ ์ ์์ต๋๋ค.
body1=soup.find('div',class_='detail-body font-size')
body1.text
ํด๋น ์ฝ๋๋ก ๋ณธ๋ฌธ๋ด์ฉ์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
# ๋์
๋๋ฆฌ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์ํ๋ ๋ฐ์ดํฐ ๋ด๊ธฐ
data={'๋ด์คurl':[url],'์ ๋ชฉ':[title1.text],'๋ด์ฉ':[body1.text]}
# ๋ง๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํฐํ๋ ์ ๊ตฌ์กฐ๋ก ๋ง๋ค๊ธฐ
df=pd.DataFrame(data)
#csv ํ์ผ๋ก ์ ์ฅ
df.to_csv('C:\\Users\\user\\Desktop\\analysis\\project\\news1_kbs.csv',index=False, encoding='utf-8-sig')
์ํ๋ ๋ด์ค๋ฅผ ํฌ๋กค๋ง ํ๋ฉฐ csv ํ์ผ๋ก ์ ์ฅํ์ต๋๋ค.
์ด์ ์ค๋ฅธ์ชฝ์ ์๋ ๋ด์ค๋ฅผ ํด๋ฆญํ์ฌ ์ฃผ์๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
url_list=[]
title_list=[]
body_list=[]
url1 = 'https://news.kbs.co.kr/news/pc/view/view.do?ncd=8083891'
html_doc1=requests.get(url1).text
soup1=BeautifulSoup(html_doc1,'html.parser')
title1=soup1.find('h4',class_='headline-title').text.text
body1=soup1.find('div',class_='detail-body font-size').text
url_list.append(url1)
title_list.append(title1)
body_list.append(body1)
url2='https://news.kbs.co.kr/news/pc/view/view.do?ncd=8083890'
html_doc2=requests.get(url2).text
soup2=BeautifulSoup(html_doc2,'html.parser')
title2=soup2.find('h4',class_='headline-title').text
body2=soup2.find('div',class_='detail-body font-size').text
url_list.append(url2)
title_list.append(title2)
body_list.append(body2)
data12={'๋ด์คurl':url_list,'์ ๋ชฉ':title_list,'๋ด์ฉ':body_list}
df12=pd.DataFrame(data12)
df12.to_csv('C:\\Users\\user\\Desktop\\analysis\\project\\news12_kbs.csv',index=False, encoding='utf-8-sig')
๋น ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๊ณ
url1~body1์๋ ์ผ์ชฝ์ ๋ด์ค๋ฅผ, url2~body2 ์๋ ์ค๋ฅธ์ชฝ ๋ด์ค๋ฅผ ์ ์ฅํฉ๋๋ค.
๋น ๋ฆฌ์คํธ์ append ๊ธฐ๋ฅ์ ์ฌ์ฉํด ์ถ๊ฐํด์ฃผ๊ณ csv ํ์ผ๋ก ๋ง๋ญ๋๋ค.
csv๋ฅผ ์ด์ด๋ณด์๋ฉด ์ด๋ ๊ฒ ์ ๋๋ก ํฌ๋กค๋ง ๋ ๊ฒ์ ํ์ธํด๋ณด์ค ์ ์์ต๋๋ค.
for๋ฌธ์ ์ฌ์ฉํด ์น ํฌ๋กค๋ง
url_list=[]
title_list=[]
body_list=[]
urls=['https://news.kbs.co.kr/news/pc/view/view.do?ncd=8083891',
'https://news.kbs.co.kr/news/pc/view/view.do?ncd=8083890']
for ulr in urls:
html_doc=requests.get(url).text
soup=BeautifulSoup(html_doc,'html.parser')
title=soup.find('h4',class_='headline-title').text
body=soup.find('div',class_='detail-body font-size').text
url_list.append(url)
title_list.append(title)
body_list.append(body)
data={'๋ด์คurl':url_list,'์ ๋ชฉ':title_list,'๋ด์ฉ':body_list}
df=pd.DataFrame(data)
df.to_csv('C:\\Users\\user\\Desktop\\analysis\\project\\news12_kbs_same.csv',index=False, encoding='utf-8-sig')
for๋ฌธ์ ์ฌ์ฉํด์ ๋ฐ๋ณต๋๋ ์ฝ๋๋ฅผ ์ค์ฌ๋ณด์์ต๋๋ค.