๐Ÿ“ฆ๋ถ„์„ ํ”„๋กœ์ ํŠธ/๐Ÿš… ํฌ๋กค๋ง ๋ถ„์„

๐Ÿš… ํฌ๋กค๋ง ๋ถ„์„ ํ”„๋กœ์ ํŠธ (1) - BeautifulSoup ํ™œ์šฉ ๋‰ด์Šค ํฌ๋กค๋ง

๋ฐ์ดํ„ฐํŒ์Šค 2024. 10. 17. 15:05

๐Ÿš… ํฌ๋กค๋ง ๋ถ„์„ ํ”„๋กœ์ ํŠธ

โœ…  ์ฃผ์ œ : ๋‰ด์Šค,๊ธฐ์ฐจํ‘œ,๊ด€๊ด‘์ƒํ’ˆ ๋ฆฌ๋ทฐ๋“ฑ ๋‹ค์–‘ํ•œ ์›นํŽ˜์ด์ง€ ํฌ๋กค๋ง์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ๋ฐ ๋ถ„์„ 

โœ…  ๋ฐฐ๊ฒฝ : 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๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ค„์—ฌ๋ณด์•˜์Šต๋‹ˆ๋‹ค.