본문 바로가기

크롤링

(국비지원무료교육) web 크롤링/ 멜론차트크롤링/ 네이버크롤링

 

Requests

역 할 :  url 요청, html 다운로드

사용법 : requests.get(url주소)

 

Requests 사용법

  • 내가 원하는 페이지의 정보를 요청하는 라이브러리

 

req.get("주소")   ------> 주소를 가져와준다

 

 

res.text   -----> res 데이터 그 안에 있는 글자 정보를 보여준다.

 


멜론 데이터 불러오기

멜론 홈페이지를 불러오는데 <Response 406> 오류가 발생한다.

 

--> 헤더 작업 필요 ! : 브라우저인척 속이는 작업 (헤더작업)

 

Response[200]-->(0)

 

Response[406] ---> 요청단에서 오류

 

 

 

멜론 사이트에 접속해서 개발자도구 F12를 누르면

 

 

위에 창이 뜬다.  1.상단에 Network를 눌러서 새로고침을 한 후 name: 멜론사이트를 클릭! 


 

Headers 클릭 후 !

 

제일 하단에 User-Agent의 값을 복사해서 가져온다. 

 

 

헤더작업을 해줘야 한다 !!
적용할 홈페이지 접속 -> F12-> F5(새로고침) -> Network(상단쪽)-> type-> document(클릭) -> Header -> 젤 밑에 User-Agent:
 
h = { "User-Agent"  : "값  "}  -->>      :   한꺼번에 문자열 x
변수 = req.get("검색 사이트" ,  headers = h)
변수.text

 

헤더작업을 해주고 다시 requests를 변수에 대입시킨다.

 

melon = req.get("https://www.melon.com/" , headers = h) 

 

 melon.text --> 멜론 사이트에 있는 글자 정보를 보여준다!

 


네이버에서 상단글자만 가져오기 

 

 

우선 req.get("네이버")로 네이버 주소를 가져온다.

 

 

res라는 변수에 대입후 res.text로 글자만 긁어 가져옵니다.

 

BeautifulSoup

  • 넘겨받은 텍스트정보(사람을위한정보)를 html정보로(컴퓨터를위한정보) 변형시켜주는 라이브러리

 

1. BeautifulSoup를 사용하라면  먼저 임포트부터 해줘야합니다

 

   ---> from bs4 import BeautifulSoup as bs   (한 번 선언해주면 다음에 사용할 때는 안해도됩니다)

 

2. soup = bs(res.text, "lxml") 

     

   ---> bs를 통해서 내가 가지고 있는 텍스트정보를(res.text) lxml방식을 통해서 변형

 

   ---> bs(바꿀데이터, "바꿀방식")

 

3. soup 데이터에서 상단글자만 찾아야기 때문에!

 

naver_list = soup.find_all( "a", class_ = "nav" )

 

  ---> soup.find_all("a" , class_= "nav" )

  ---> soup 데이터에서 원하는 요소 추출  find.all("태그", "구분자")

 

4. naver_list[0]

 

  ---> 0번째 값 출력 ---> '메일'

 


위의 naver_list길이만큼 출력하면 상단 값을 구할 수 있기 때문에 

: 반복해야될 횟수가 정해짐 ---> for문 사용!

 

for i in naver_list :
    print(i.text) (i 점 text)


멜론 TOP 100(곡명, 가수명, 순위) 수집

 

 

 

멜론 사이트에 있는 차트 top 100에 있는 곡들 가져오기

 

 

 

항상 import 안 되있으면 import 먼저 하는거 잊지말기!

 

 

1. 우선 req.get("멜론 차트 주소 ")를 가져옵니다.

 

2. 위의 문제와 같이 멜론은 헤더작업을 해줘야하기 때문에 

   

   ---> h = { "User-Agent"  : " 값  "}  -->>      :   한꺼번에 문자열 x

           변수 = req.get("검색 사이트" ,  headers = h)

3. 헤더작업을 해준다음 따로 chart는 변수명에 대입해줍니다.

 

4. 변수명.text


 

1. bs(바꿀데이터, "바꿀방식")

   

   ---> bs( chart.text, "lxml")

 

 

 

구분자가 없음

 

클래스값이 두개인경우 --->  ellipsis(공백)rank02 .ellipsis.rank02

 

각각 클래스값(.)구분 지어주기! 


 

 

.strip() ---> 공백제거, 불필요한 개행문자 , 이스케이프코드가 존재하는경우에는 삭제

 

 

 

append ---> 리스트에 값 추가 /  맨 뒤에 값 추가

 

rankList는 순위 데이터인데 0번째부터 나오기 때문에 i +1 을 해줘서 1위부터 출력되게 만듭니다!

 


 

Pandas는 파이썬에서 사용하는 데이터분석 라이브러리입니다.

 

행과 열로 이루어진 데이터 객체를 만들어 다룹니다

 

Pandas를 사용하려면 먼저 import를 해줘야 합니다

---> import pandas as pd

 

표는 컬럼과 해당하는 데이터를 가진 구조 , 딕셔너리형태의 데이터

 

{key : value}

 

---> info={"가수" : singerList, "노래제목": songList, "순위": rankList}

 

set_index() :  DataFrame에 설정된 컬럼명(열)을 인덱스로 사용할 수 있습니다.

 

set_index("순위" , inplace =True)

 

"순위" 컬럼이 인덱스로 지정되면서 데이터 열에서는 삭제되었습니다.

 

데이터프레임의 인덱스를 영구적으로 변경할 때는 'inplace=True'를 사용

 


 



csv 파일로 저장 할때 인코디을 안해주면 한글 파일이 깨집니다 

 

.to_csv("파일명", 인코딩="인코딩방법")

 

 

 

이 파일을  보기 좋게 html로 만들려고 하면

 

.to_html("파일명.html")

 


https://www.smhrd.or.kr/

 

스마트인재개발원

4차산업혁명시대를 선도하는 빅데이터, 인공지능, 사물인터넷 전문 '0원' 취업연계교육기관

www.smhrd.or.kr