-
크롤링 실습 (멜론차트 수집 & 환율데이터 수집)WEB/Crawling 2023. 10. 11. 16:03
멜론차트 TOP 100 수집
- 가수의 이름과 노래 제목을 수집한다.
- 데이터프레임표로 만들어본다.
- csv 파일로 저장을 시킨다.
import requests as req from bs4 import BeautifulSoup as bs
1. req를 활용해서 멜론차트 사이트 요청
head = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36'}
res = req.get('<https://www.melon.com/chart/index.htm>', headers = head)
2. bs를 통해서 html 데이터로 변형
soup = bs(res.text, 'lxml')
3. 제목 가져오기
title = soup.select('div.ellipsis.rank01 > span > a')
4. 가수이름 수집
singer = soup.select('div.ellipsis.rank02 > a:first-child')
5. 서로 개수가 맞는지 검사
데이터 개수를 반드시 검증 해야한다.
len(singer) # 106 singer = soup.select('div.ellipsis.rank02') # 100 X singer = soup.select('div.ellipsis.rank02 > span.checkEllipsis') # 100 O
6. 순수한 텍스트를 담아줄 리스트 제작
왜? 내가 필요한 정보는 텍스트 정보만 필요해서!
singer_list = [] title_list = [] for i in range(len(title)): title_list.append(title[i].text) singer_list.append(singer[i].text)
7. 데이터 프레임 제작
💡 표를 만들 땐 컬럼과 데이터가 필요하다. → 딕셔너리를 써야겠다.
dic = {"가수이름":singer_list, "노래제목": title_list}
객체와 배열의 차이
- 객체는 전부 다른 타입을 쓸때
- 배열은 같은 종류를 쓸 때
import pandas as pd melon = pd.DataFrame(dic)
rank_list = [] for i in range(1,101): rank_list.append(i)
인덱스 번호 대신 원하는 컬럼으로 대체하는 경우 set_index()
inplace=True의 역할은 실제 파일로 저장할 때 , 인덱스를 지워주는 역할 ⭐melon.set_index("순위", inplace=True)
8. csv 확장자로 저장
파일을 저장할 때 반드시 인코딩을 해줘야한다!
- utf-8
- euc-kr
- utf-8-sig
melon.to_csv('멜론차트.csv', encoding="euc-kr")
환율데이터 수집
import requests as req
1. req를 활용하여 환율 사이트 정보 요청
res = req.get('<https://finance.naver.com/marketindex/>')
2. bs데이터 변형
soup = bs(res.text, 'lxml')
3. 통화이름 수집
tonghwa = soup.select('tbody > tr > td.tit > a')
200이라고 해서 무조건 되는게 아니다.
절대경로 = url
상대경로 = 내가 가지고 있는 디렉토리
선택자의 문제가 없는데 안 된다면 경로 문제이다.
res = req.get('<https://finance.naver.com/marketindex/exchangeList.naver>')
iframe
특징
1. 실제 원본데이터는 다른 주소에 저장이 되어있고, 창을 통해서 보여만 진다.
2. 데이터의 수집이 불가능
해결법
원본데이터가 있는 주소로 찾아가야한다. src부분을 참고해라!
주의점
상대경로인 경우에는 반드시 절대경로로 변경후 접근
- 데이터 수집시 올바른 정보가 안 나오면 선택자를 먼저 검사
- 선택자의 문제가 없다면, iframe을 의심
요즘에는 iframe은 보안상의 문제로 사용X
Tip
선택자를 한번에 복사
개발자도구위에서 요소위에 우클릭 copy → copy seletor
주의점! 내가 선택한 요소 한개만 반환하는 선택자가 나온다.
복수개의 데이터가 필요한 경우에는 선택자를 수정해줘야한다.
즉, ID 혹은 nth-child() 선택자를 수정해줘야 한다.
'WEB > Crawling' 카테고리의 다른 글
Selenium 간단 사용법 (0) 2023.10.11 크롤링이란? 그리고 requests (0) 2023.10.10