import requests as req
res = req.get('http://naver.com')
res.text
from bs4 import BeautifulSoup as bs
soup = bs(res.text, 'lxml')
txt = soup.select('a.nav')
for i in txt:
print(i.text)
import requests as req
h = {"User-Agent": "Mozilla/5.0..."}
res = req.get('https://www.melon.com/chart/', headers = h)
res.text
from bs4 import BeautifulSoup as bs
soup = bs(res.text, 'lxml')
(1) 내가 수집하고자 하는 요소가 구분(id.class) 없는 경우에는
그 요소를 포함하고 있는 바로 위의 부모요소로 접근
(2) 부모요소 또한 구분자가 없는 경우에는 구분자가 있는 부모까지 검사
(3) 클래스값 중간에 공백이 있는경우 -> 공백을 자손으로 인식하기 때문에 문제발생
공백을 .으로 바꾼다.
노래제목
song = soup.select('div.ellipsis.rank01 >span >a')
노래가수
singer = soup.select('div.ellipsis.rank02 >span')
데이터 정제
(1) 순수한 글자정보만 추출해서 저장
(2) 순수한 글자정보만 저장시킬 리스트 생성
songList = []
singerList = []
rankList = []
둘다 100개이고 index가 0~99이기 때문에 인덱스 활용
for i in range(len(singer)):
songList.append(song[i].text)
singerList.append(singer[i].text)
rankList.append(i+1)
import pandas as pd
dic = {'제목': songList, '가수':singerList, '순위':rankList}
melon = pd.DataFrame(dic)
melon.set_index('순위', inplace=True)
melon.to_csv('멜론차트.csv', encoding="euc-kr")
한글이 깨지기 때문에 encoding 필수!
1. euc-kr
2. utf-8
3. ""
4. utf-i-sig