Processing math: 40%
본문 바로가기

개발

파이썬 코드로 멜론 노래 크롤링

반응형
다음 강의를 보고 작성한 필기입니다.

###1

멜론사이트에서 검색 시
개발자모드 > network > all 을 보면
각 글자가 바뀔때마다 새로운 json파일이 뜸.
이 json파일에서 우클릭 > open in new tab 했을 때의 결과물을 크롤링 하는 것.
이 탭의 url복사해두기

###2

파이썬 새 파일 melon_search.py 생성



import requests
url = "http://www.melon.com/search/keyword/index.json?jscallback=jQuery191035080718916700837_1500265008682&query=%25EC%2597%2590%25ED%2594%25BD%25ED%2595%2598%25EC%259D%25B4&_=1500265008687"
#아까 json파일의 url
response = requests.geturl.text
printresponse

###3 패러미터 분리

위 json url
http://www.melon.com/search/keyword/index.json?jscallback=jQuery191035080718916700837_1500265008682&query=%25EC%2597%2590%25ED%2594%25BD%25ED%2595%2598%25EC%259D%25B4&_=1500265008687
에서 ? 뒷부분이 파라미터임. 이것만 따로 분리해서 넣어주자.
import requests
url = "http://www.melon.com/search/keyword/index.json"
params = {'jscallback':'jQuery191035080718916700837_1500265008682', 'query':'에픽하이',
    }
response = requests.geturl,params=params.text
printresponse
강의에는 없지만 이렇게 하면 쿼리부분이 한글이라서 에러가 남. 맨위에 한글인코딩을 위한 코드
#-*- coding: utf-8 -*-
추가

###4 json string -> python dictionary

- 문자열 정리
response.replaceparams[jscallback]+(,.replace';','')
- json 임포트
import json
- dictionary 만들기
json_string = response.replaceparams['jscallback']+'(', ''.replace';','')
result_dict = json.loadsjson_string
printresult_dict
#-*- coding: utf-8 -*-
import json
import requests
url = "http://www.melon.com/search/keyword/index.json"
params = {'jscallback':'jQuery191035080718916700837_1500265008682', 'query':'에픽하이'}
response = requests.geturl, params=params.text
json_string = response.replaceparams['jscallback']+'(', ''.replace';','')
result_dict = json.loadsjson_string
printresult_dict

###5. 노래 제목 + 노래 디테일 링크 출력

#-*- coding: utf-8 -*-
import json
import requests
url = "http://www.melon.com/search/keyword/index.json"
params = {'jscallback':'jQuery191035080718916700837_1500265008682', 'query':'터보'}
response = requests.geturl, params=params.text
json_string = response.replaceparams['jscallback']+'(', ''.replace';','')
result_dict = json.loadsjson_string
for song in result_dict['SONGCONTENTS']:
  print('''{SONGNAME} {ALBUMNAME} {ARTISTNAME}
  http://www.melon.com/song/detail.htm?songId={SONGID}'''.format**song)

###6. 터미널에서 사용자가 입력한 값에 대한 검색이 되도록 변경

#-*- coding: utf-8 -*-
import json
import requests
def melon_searchq:
  url = "http://www.melon.com/search/keyword/index.json"
  params = {'jscallback':'jQuery191035080718916700837_1500265008682', 'query':q}
  response = requests.geturl, params=params.text
  json_string = response.replaceparams['jscallback']+'(', ''.replace';','')
  result_dict = json.loadsjson_string
  for song in result_dict['SONGCONTENTS']:
    print('''{SONGNAME} {ALBUMNAME} {ARTISTNAME}
    http://www.melon.com/song/detail.htm?songId={SONGID}'''.format**song)
if __name__ == '__main__':
  print"찾으려는 것을 입력하세요 : "
  line = input
  melon_searchline

###7. 찾으려는 값이 없을 경우 처리

#-*- coding: utf-8 -*-
import json
import requests #웹 리퀘스트
def melon_searchq:
  url = "http://www.melon.com/search/keyword/index.json"
  params = {'jscallback':'jQuery191035080718916700837_1500265008682', 'query':q}
  response = requests.geturl, params=params.text
  # response = BeautifulSoupr.content, 'html.parser', from_encoding='utf-8'
  json_string = response.replaceparams['jscallback']+'(', ''.replace';','')
  result_dict = json.loadsjson_string
  if 'SONGCONTENTS' not in result_dict:
    print'[찾으시는 결과가 없습니다]'
  else:
    for song in result_dict['SONGCONTENTS']:
      print('''{SONGNAME} {ALBUMNAME} {ARTISTNAME}
      http://www.melon.com/song/detail.htm?songId={SONGID}'''.format**song)
if __name__ == '__main__':
  print"찾으려는 것을 입력하세요"
  line = input
  melon_searchline


반응형