news_url="https://n.news.naver.com/mnews/article/449/0000230998?sid=103"
res = req.get(news_url)
html = bs(res.text, 'lxml')
user-agent
가 null 값이면 그냥 끊어버린다.user-agent
부분을 꼭 채워서 server로 보내줘야한다. 요청할 때 이 값을 구성해서 요청하면 강제종료에 대한 문제를 해결할 수 있다.news_url="https://n.news.naver.com/mnews/article/449/0000230998?sid=103"
header = {
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"
}
res = req.get(news_url, headers=header)
html = bs(res.text, 'lxml')
앞서 언급한대로 진행을 했다면 html변수안에 해당하는 웹 페이지의 HTML문서가 잘 들어갔을 것이다.
이제 우리는 여기서 해당하는 제목과 내용을 꺼내오면 된다.
title = html.select_one("h2.media_end_head_headline")
print(title.text)
#result
[날씨]오늘 ‘중복’ 무더위 기승…곳곳 소나기 소식
content = html.select_one("#dic_area")
content.text
print()
함수와 strip()
함수를 동시에 써서 인간친화적인 문구로 바꾸어보자content = html.select_one("#dic_area")
print(content.text.strip())
import requests as req
import pandas as pd
from bs4 import BeautifulSoup as bs
melon_url = "https://www.melon.com/chart/index.htm"
header = {
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"
}
res = req.get(melon_url, headers = header)
html = bs(res.text, 'lxml')
user-agent
를 준하고 requests lib을 사용하여 res에 String형태로 담아주고 분석을 하기위해 HTML 변수에 beautifulSoup 형태로 변환하여 담아준다.ranks = html.select("td > div > span.rank")
songNms = html.select("div.ellipsis.rank01 a")
artists = html.select("div.ellipsis.rank02 > span")
albumImgs = html.select("a.image_typeAll>img")
개발자 툴을 열어 크롤링할 CSS 선택자들을 찾고 원하는 data개수가 맞는지도 확인한다.
4개의 빈 리스트에 데이터를 저장해보자
// 빈 배열 선언
rankslist = []
songNmlist = []
artistlist = []
albumImgslist = []
// 어차피 개수는 모두 100개로 동일하니 대표로 ranks를 for문에 부여
for i in range(len(ranks)):
rankslist.append(ranks[i].text)
songNmlist.append(songNms[i].text)
artistlist.append(artists[i].text)
albumImgslist.append(albumImgs[i].get("src"))
melon_dic = {
"순위":rankslist,
"곡명":songNmlist,
"아티스트":artistlist,
"앨범이미지":albumImgslist
}
melon_df = pd.DataFrame(melon_dic)
melon_df.to_csv("melon_top100.csv", encoding="euc-kr", index=False)
따로 path를 지정해주지 않는다면 작성하는 file의 folder에 자동으로 저장됨.
또한 0~ 나아가는 default index가 싫다면 index=False
를 통하여 index 제거 가능.