반응형
다음 강의를 보고 작성한 필기입니다.
###1
멜론사이트에서 검색 시
개발자모드 > network > all 을 보면
각 글자가 바뀔때마다 새로운 json파일이 뜸.
이 json파일에서 우클릭 > open in new tab 했을 때의 결과물을 크롤링 하는 것.
이 탭의 url복사해두기
###2
파이썬 새 파일 melon_search.py 생성
import requestsurl = "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파일의 urlresponse = requests.get(url).textprint(response)
###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 requestsurl = "http://www.melon.com/search/keyword/index.json"params = {'jscallback':'jQuery191035080718916700837_1500265008682', 'query':'에픽하이',}response = requests.get(url, params=params).textprint(response)
강의에는 없지만 이렇게 하면 쿼리부분이 한글이라서 에러가 남. 맨위에 한글인코딩을 위한 코드
#-*- coding: utf-8 -*-
추가
###4 json string -> python dictionary
- 문자열 정리
response.replace(params['jscallback']+'(', '').replace(');','')
- json 임포트
import json
- dictionary 만들기
json_string = response.replace(params['jscallback']+'(', '').replace(');','')
result_dict = json.loads(json_string)
print(result_dict)
#-*- coding: utf-8 -*-import jsonimport requestsurl = "http://www.melon.com/search/keyword/index.json"params = {'jscallback':'jQuery191035080718916700837_1500265008682', 'query':'에픽하이'}response = requests.get(url, params=params).textjson_string = response.replace(params['jscallback']+'(', '').replace(');','')result_dict = json.loads(json_string)print(result_dict)
###5. 노래 제목 + 노래 디테일 링크 출력
#-*- coding: utf-8 -*-import jsonimport requestsurl = "http://www.melon.com/search/keyword/index.json"params = {'jscallback':'jQuery191035080718916700837_1500265008682', 'query':'터보'}response = requests.get(url, params=params).textjson_string = response.replace(params['jscallback']+'(', '').replace(');','')result_dict = json.loads(json_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 jsonimport requestsdef melon_search(q):url = "http://www.melon.com/search/keyword/index.json"params = {'jscallback':'jQuery191035080718916700837_1500265008682', 'query':q}response = requests.get(url, params=params).textjson_string = response.replace(params['jscallback']+'(', '').replace(');','')result_dict = json.loads(json_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_search(line)
###7. 찾으려는 값이 없을 경우 처리
#-*- coding: utf-8 -*-import jsonimport requests #웹 리퀘스트def melon_search(q):url = "http://www.melon.com/search/keyword/index.json"params = {'jscallback':'jQuery191035080718916700837_1500265008682', 'query':q}response = requests.get(url, params=params).text# response = BeautifulSoup(r.content, 'html.parser', from_encoding='utf-8')json_string = response.replace(params['jscallback']+'(', '').replace(');','')result_dict = json.loads(json_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_search(line)
반응형
'개발' 카테고리의 다른 글
[FFMPEG] 트랜스코딩, 필터, 필터 체이닝 기본 문법 (0) | 2023.03.27 |
---|---|
[FFMPEG] 오디오의 기본, 오디오 샘플, 컨테이너, 인코딩, 트랜스코딩 (0) | 2023.03.26 |