도와주세요

파이썬 멜론차트 크롤링 구현 관련

title: 만렙이 되어보자joyful2018.12.08 10:08조회 수 221댓글 17

    • 글자 크기

제가 파이썬을 1도 모르는 사람이라 파이썬으로 멜론 차트 크롤링하는 방법을 몰라서 이렇게 질문해요

스포어 호스팅은 파이썬 사용 가능하다고 들었어요

db가

곡 순위       곡명      아티스트

이렇게 되 있다면

멜론차트를 크롤링해서 자동으로 db에 저장되면 좋겠습니다

곡 순위는 순위 곡명에는 노래제목 아티스트는 노래 부른 가수 로 저장되게

스포어 호스팅에서도 사용되게

1시간 간격으로 크롤잉되게 해주세요!

너무 무리한 요구인것 같은데;;;

도와주시면 감사하겠습니다!

그림을 굉장히 좋아함

    • 글자 크기
usb 부팅 질문 드립니다. (by calm) 음원스트리밍은 음원 보안을 어떤 방식으로 하나요? (by joyful)
  • 2018.12.8 10:55

    불가능합니다.

    멜론차트는 오전2시부터 6시까지 실시간 차트를 제공하지 않습니다.

  • @Hanam09
    title: 만렙이 되어보자joyful글쓴이
    2018.12.8 15:57

    그냥 멜론차트는 포기하렵니다

  • 2018.12.8 11:32

    우선 마스터 님께 스포어 호스팅에서 beautifulsoup, python-mysqldb이 설치 가능한지 여쭤봐야 할 것 같아요.

    파이썬 라이브러리를 하나도 설치할 수 없다면 정규식으로 파싱해야 되고 MySQL(MariaDB)과 연동할 수 없으니깐요.

    제가 스포어는 잘 모르지만 카페24를 비롯해서 일반적인 웹호스팅 중에 라이브러리가 설치 가능한 곳은 거의 없다고 알고 있어요.

     

    멜론차트는 다행히 동적 웹페이지도 아니고 비교적 깔끔하게 만들어진 사이트라서

    selenium을 사용하지 않고도 urllib이나 requests 등으로 가져와서 beautifulsoup으로 간단히 파싱할 수 있어요.

    data = soup.select_one('tbody')

    print(data.text)

    tbody 태그가 하나밖에 없어서 극단적으로 이렇게만 해도 차트의 내용은 다 크롤링해서 가져올 수 있어요.

    (물론 이렇게 하면 문자열 처리가 귀찮아지겠지만요)

     

    그리고 멜론차트는 봇을 막기 위해서 User-agent를 체크하기 때문에 헤더에 넣어줘야 접근이 가능해요.

    예를 들자면 이런 식으로요.

    headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}

     

    멜론차트는 API를 더 이상 신규로 제공하지 않고, 여러 이유로 사이트 구조를 자주 바꾸는 것으로 알고 있어요.

    구글링하시면 멜론차트를 파싱하는 예제가 많이 있는데요.

    만약 그대로 복붙해서 따라했는데 안 되면 그 사이에 DOM 구조가 변했다고 보시면 되어요.

    멜론 사이트가 업데이트 될 때마다 대응하기 어려우시면

    멜론차트를 파싱하는 다른 사이트에 양해를 구하고 파싱하는 방법이 있겠죠 ^^

     

    파이썬을 이용해 DB에 테이블을 생성하고 데이터를 삽입하는 예제는 구글링하시면 아주 많이 있어요~!

    제 생각에는 1시간 주기로 파싱해서 위젯 형태로 제공할 목적이라면

    굳이 DB로 저장할 필요는 없고 CSV로 해도 될 것 같아요.

    다만 노래 제목에 쉼표가 들어가는 경우가 있으니 delimiter를 쉼표를 사용하면 안 될테구요.

     

    이런 방식으로 차트를 크롤링해서 DB에 넣어주는 파이썬 파일을 만들고

    crontab으로 1시간 간격으로 반복실행하면 되겠죠.

    작성하고 보니 스포어에서 파이썬을 완벽히 지원하지 않더라도

    curl에서 User-agent를 적절히 변경해서 PHP로 파싱하시면 될 것 같네요 ^^

    Beautifulsoup을 사용하지 못하면 조금 번거롭지만

    사이트 구조가 간단하기 때문에 Simple HTML DOM Parser를 사용하면 큰 차이는 없을 것 같네요.

    그럼 좋은 주말 되세요~!

  • @이니스프리
    title: 만렙이 되어보자joyful글쓴이
    2018.12.8 15:58

    @마스터 beautifulsoup, python-mysqldb설치 가능한가요?

    많은 도움이 되었습니다 ㅎㅎ 감사합니다

  • @joyful


    https://studyforus.com/freeboard/247944


    예전에 마스터 님께서 이렇게 말씀하긴 하셨네요 ^^


    스포어 서버에서 PIP를 지원하지 않더라도 패키지를 다운받아서 setup.py로 설치하는 방법도 있어요.



    그런데 시스템 리소스나 기타 여러 문제를 고려해야 되어서 생각만큼 간단한 문제는 아닌 것 같아요.


    파이썬은 인터프리터 언어이고 시스템 리소스 측면에서 효율적인 언어는 아니라서요.


    네모 님께서도 예전에 리소스 때문에 유머 크롤링 사이트(아마도 PHP)를 스포어에서 돌리지 않으셨던 것으로 기억하구요 ㅠㅠ


    그리고 파싱 스크립트 작성하는 도중에 같은 IP에서 반복된 작업을 계속 요청하면 타겟서버 측에서 차단하기도 하거든요.


    스포어는 VPS 환경이 아니라서 VPN이나 프록시를 사용할 수도 없으니깐요.


    이건 제가 스포어 서버의 리소스에 대해 잘 몰라서 뭐라고 말씀을 드리기 어렵네요 ㅠㅠ

  • @이니스프리
    title: 만렙이 되어보자joyful글쓴이
    2018.12.8 21:01

    그냥 스포어에서 파이썬 크롤링은 포기했습니다;;;

    대신 AWS에서 크롤링만 담당하도록 생각은 해보고 있어요

  • @joyful
    2018.12.9 22:30

    그것도 좋은 방법이라고 생각되네요 ^^

    저도 VPS나 스틱 PC를 이용해서 크롤링하고 그 결과를 웹호스팅으로 보내는 방법으로 사용하고 있어요 :)

  • @이니스프리
    title: 만렙이 되어보자joyful글쓴이
    2018.12.10 19:51

    직접 크롤링을 하시군요!

    DB를 업로드하는방식우로 사용중이신가요??

  • @joyful
    2018.12.10 20:03

    간단한 텍스트 데이터의 크롤링이고, DB로 장기간 보관할 필요성이 없는 내용이어서

    저는 DB로 업로드하지 않고 주로 CSV 파일을 사용하고 있네요 ^^

    물론 위젯이 아니라 게시글의 형태로 저장을 하는 것도 있는데요.

    이 경우에는 결과적으로 DB에 저장이 되겠죠 ㅠㅠ 

    사실은 파싱 스크립트를 작성할 당시에 VPS의 아파치 설정이 뭔가 꼬여서 결과적으로 웹 서버와 파싱 서버가 분리되었네요 ㅜㅜ


    크롤링한 CSV 파일을 다른 서버로 업로드하는 스크립트에 대해서는

    제가 예전에 스포어에 올렸고 네모 님께서 일부 수정할 부분을 말씀해주셨던 것으로 기억하네요~!

     

    크롤링이라고 보기에 매우 부끄러운 수준이지만

    Selenium을 사용하면 저처럼 파이썬, HTML, 자바스크립트를 1도 모르는 사람도 대부분의 경우 크롤링을 할 수 있더군요 ^-^

    직접 작성한 스크립트로 크롤링을 하지 못하면 사이트 구조가 조금만 변경되거나 환경이 바뀌어도 무용지물이 되기 때문에

    제가 다룰 수 있는 범위 내의 허접한 수준의 PHP, 파이썬, 오토핫키 이외에 별도의 파싱툴은 사용하고 있지 않고 있네요.

    사실은 파싱기 구입할 돈이 없어서요 ㅠㅠ 


    그럼 편안한 저녁 되세요! :)

  • @이니스프리
    title: 만렙이 되어보자joyful글쓴이
    2018.12.11 17:45

    Selenium이란건 오늘 처음 알았네요!

    많은 도움이 되었어요. 감사합니다!

  • @joyful
    2018.12.11 18:46

    제가 다른 차트는 확인을 안 해봐서 잘 모르겠지만

    멜론차트는 동적 웹페이지가 아니기 때문에 굳이 Selenium을 사용하실 필요가 없어요~! ^^

    실은 저도 작년에는 저작권법 등에 저촉되지 않는 범위 내에서

    여러 차트를 파싱해서 종합적인 차트를 만들어보려는 계획이 있었는데요.

    제가 워낙 K-POP에 관심이 없고, 음원을 직접 다루지 않으면 음악 사이트로서 가치가 떨어져서 그 계획은 일단 보류 중이네요.

  • @이니스프리
    title: 만렙이 되어보자joyful글쓴이
    2018.12.12 17:51

    제가 만들고 싶은게 그건데요???

    차트를 종합적으로 보여주는 사이트가 국내에선 아이차트가 유일하니 제가 두번째로 만들어보고싶어서 만들어보려고는 하는 중입니다(아직 시작도 안했어요 ㅋㅋ)

    이니스프리님과 반대로 전 K-POP에 무한한(...) 관심을 가지고 있고 음원을 직접 다루지 않아도 Youtube Music Engine을 이용하시면 유튜브에 있는 동영상으로 재생해서 음원을 보유하지 않아도 됩니다.

    혹시 같이 만들어보실래요?

  • 2018.12.12 18:26

    Youtube Music Engine을 이용해서 그대로 운영하면 애드센스 고시도 통과하기 어렵고,

    시스템 리소스를 많이 잡아먹어서 운영비가 많이 들 것이라는 판단이 들어서 포기했어요 ^^

    그건 스포어에서 Unlimited 호스팅을 신청하더라도 운영할 수 있는 수준이 도저히 아니라서요.

    저는 백엔드를 완전히 새로 가볍게 짤 수 있는 실력이 안 되거든요.

    장기간 안정적으로 크롤링하려면 IP를 계속 바꿔줘야 되고 여러모로 운영이 부담스럽기도 하구요.

    그리고 제가 작년에 확인했을 때 비슷한 방식으로 운영하는 사이트들이 이미 꽤 있더군요.

  • @이니스프리
    포인트 폭탄+ (비회원)
    2018.12.12 18:26
    이니스프리님 축하합니다.
    추가로 100포인트만큼 포인트 폭탄+를 받았습니다.
  • @이니스프리
    title: 만렙이 되어보자joyful글쓴이
    2018.12.12 18:29

    YME가 그런 단점들을 가지고 있군요...!

    그럼 저도 이 계획을 잠시 보류해야겠네요...

    감사합니다!

  • @joyful
    2018.12.13 16:26

    K-POP에 관심이 많다고 하시니 파싱 연습용으로 제작해서 VPS에서 돌리시면 좋을 것 같아요 ^^

    저는 어릴 때부터 K-POP을 거의 안 듣고 영국 쪽 음악을 주로 들어서

    굳이 제가 비용을 부담하면서까지 그렇게 운영하고 싶지는 않아서요 ㅎㅎ

     

    어느 장르나 일종의 라이프 사이클이 존재한다고 보는데

    제 막연한 추측이지만 K-POP이란 장르는 이미 고점을 찍었다고 판단되네요.

    썩 좋은 비유는 아니지만 10년 전에 거칠 것이 없어보이던 조선주가 그랬듯이 말이죠.

    이 부분은 사람마다 전혀 다르게 평가할 수 있고, 제가 논리정연하게 설명할 수 있는 부분은 아닌 것 같네요 ^^

    출생인구의 감소와도 어느 정도 연관이 있을 것 같습니다.

     

    어디까지나 제 개인적인 생각이고 Youtube Music Engine의 소스를 제가 분석해본 적은 없지만

    구글에서 정책을 변경해서 관련된 API를 차단할 수 있고,

    최근 구글의 전반적인 움직임이 개발자 우호적인 방향에서 멀어지고 있다고 생각되네요.

    장기적으로 운영하시려면 음원과 관련하여 다른 대책을 마련해두셔야 할 것으로 추측되네요.

     

    그리고 애드센스를 달려면 단순히 순위 사이트가 아니라 리뷰 사이트로 구색을 갖춰야 될 것 같아요.

    단순한 리뷰 사이트가 아니라 K-POP을 완전히 포괄하는 수준의 리뷰 사이트는 적어도 제가 아는 한도 내에서는 제대로 된 사이트가 없는 것 같더군요.

    20년 넘게 잘 운영되고 있는 allmusic.com 수준의 사이트를 말씀드리는 것입니다.

    물론 이 정도 퀄리티의 리뷰를 전담할 평론가들을 고용하려면 비용이 엄청나겠지만요.

  • @이니스프리
    title: 만렙이 되어보자joyful글쓴이
    2018.12.13 17:36

    그렇군요~

댓글 달기

번호 제목 글쓴이 날짜 조회 수
공지 sfuh.tk 기본 도메인 사용하는 분들 확인바랍니다.5 마스터 8시간 전 55
공지 2019년 새해 복 많이 받으세요!15 마스터 2019.01.01 349
공지 사이트 정보등록을 신경써서 해주시기 바랍니다.3 마스터 2018.12.31 433
공지 회원 전용 페이지가 생겼습니다.15 마스터 2018.03.20 3884
공지 [필독] 질문하는 방법5 마스터 2018.02.23 633
503 브라우저와 기본응용프로그램과의 양방향 통신에 대하여6 Hanam09 2018.12.16 66
502 usb 부팅 질문 드립니다.1 calm 2018.12.14 43
파이썬 멜론차트 크롤링 구현 관련17 title: 만렙이 되어보자joyful 2018.12.08 221
500 음원스트리밍은 음원 보안을 어떤 방식으로 하나요?15 title: 만렙이 되어보자joyful 2018.12.06 120
499 제가 자바스크립트를 잘몰라서 원론적인 질문 하나 드립니다.6 홀민 2018.12.06 78
498 또다시 WWW 관련하여6 협스 2018.12.05 63
497 다음 api 사용하려고 뒤적거리다보니 curl_init, curl_easy_init 비교7 홀민 2018.12.05 62
496 콘서트 가보신 분 있으신가요?5 Piedots 2018.12.04 52
495 사이트 정보 등록 관련5 title: 만렙이 되어보자joyful 2018.12.01 60
494 WP에서 스팸....?11 협스 2018.11.30 88
493 스마트폰 연락처 관리를 어떻게 하시나요?8 이니스프리 2018.11.29 106
492 공유폴더가 안되는데 왜 안되는지를 모르겠습니다.3 calm 2018.11.27 58
491 [PHP] nl2br 함수 관련 문제 재발1 Piedots 2018.11.26 48
490 스마트 동기화가 가능한 클라우드 추천 부탁드려요~!2 이니스프리 2018.11.24 66
489 스포어 서버에서는 JQuery를 사용할 수 있나요?4 Piedots 2018.11.23 53
488 [PHP] nl2br 함수 관련3 Piedots 2018.11.21 67
487 원래 .co.kr 도메인과 .kr 도메인을 따로 따로 구입해야 하는건가요?7 title: 만렙이 되어보자맛스타 2018.11.20 84
486 노트북이 너무 시끄럽습니다.10 네모 2018.11.19 102
485 안녕하세요. AJAX로 페이지 긁어오는데에 보안오류가 생겼는데 조언을 구하고자 합니다.6 Hanam09 2018.11.19 57
484 웹페이지의 상단 메뉴를 고정하는 플러그인에 관하여 질문 드립니다4 이니스프리 2018.11.19 81
이전 1 2 3 4 5 6 7 8 9 10... 27다음
첨부 (0)
서버에 요청 중입니다. 잠시만 기다려 주십시오...