파이썬 Form Data 값이 변할때 post 요청

조회수 43회

https://www.pandalive.co.kr/live 페이지에서

F12 네트워크 탭에있는 live/ 에 있는 preview 값을 가져 오려고 하는데요 아프리카는 formdata가

안변하고 그대로였는데 여기는 값들중 일부가 클릭할때마다 매번 바뀌더군요

param 을 2개 만들어서 하나는 변하지않는 값만 넣어보고 다른하나는

모든 값을 그대로 넣어줘 봤는데도 둘다 아래와같이 오류가뜹니다

post 로 넘겨주는 Form Data 값중 일부가 계속 변할때는 어떻게해야하나요?

json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
import requests
import json
import os
import time
import sys

SAVE_FILENAME = 'live.json'
with requests.Session() as s:
    header2 = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko',
        'Referer': 'https://www.pandalive.co.kr/live'
    }
    param2 = {                       # Form Data 에서 새로고침해도 변하지않는것들
        'Y6K2VQRw0MfwbPfZ4Dna': '224',
        'AYNUR1c5v-yi4dNLpZWlOU': '126',
        'PL2SAuzDQgv_a4_EcI4Nln1wgRx4Bzo': '20',
        'wV3cO1A1GI5YNQuycO9ultuZ65IZWlOU': '0',
        '29bzyh3ZngS42UOobxfcNRI4Nln1wgRx4Bzo': 'desc',
        'YYZYU2Q30MfwbPfZ4Dna': '_t',
        'yQv1sB81otLfILAZU_XYXoaA': '2c958a9a1fcd2ca05d46e2f50d4d148b996499e494d444d6b1ae4f2fa589e9bf',   # live/ 에서 제일 아래에있는 sessKey 값과 똑같음
        'YtK1kkS4aBf-Yxfc4Dna': 'webPc',
        'y6RycBO1oZLfADX_9tKZXoaA': '1.0.0'
    }
    param3 = {                         # Form Data 전체
        'Y6K2VQRw0MfwbPfZ4Dna': '224',
        'AYNUR1c5v-yi4dNLpZWlOU': '126',
        'PL2SAuzDQgv_a4_EcI4Nln1wgRx4Bzo': '20',
        'wV3cO1A1GI5YNQuycO9ultuZ65IZWlOU': '0',
        'H5XAgw1OdK1zAu2GFv1uthl': 'l4rMGp7l8eFhOsPN8IfDzjdBvtPHnCFgqTWFBIDiSkUQ8d7dncAZqSOlrEJ6ikUQWc7dncAZqSOlrEJ6ikUQhc7d7eRU4ZP0v27tSggRoX4Dna',
        '29bzyh3ZngS42UOobxfcNRI4Nln1wgRx4Bzo': 'desc',
        'YYZYU2Q30MfwbPfZ4Dna': '_t',
        '_i3nY6v7ot9WIAugPuZ6Pj3WlOU': 'PmQUcvzDIzvrBvtQHnCTk7TOdREjeyxoZ4nALo16gaSkprCAFPxYwmdBDXB9ZNZWN8I6DzjryEY69AzU_mQKtq1HU91rFWtTW7c7cqsNh8EEgSlrBvtEHnCTZNSP1bEFiSgUQhZ7dncAZqSOlrEJ6ikUQhY7d7ePh4TUQbCigPxbyfoALXcTxNZNlbD99im_w4nUA8B69qyllrE99yxdwvcN6ABBo4tPxR2Ga9wnP7dUMpbA9ayot7C7cOgh9voPEoBDDqQosNv4Bzo',
        'Yt40SkS4eFP1sNLe4Dna': '1581412052',
        'AYohuyc98ugPuZ6Pj3WlOU': 'af4addcf042db04c90e2335556df9c588954e4fad58f22bc054a01afde86c5cb',
        'yQv1sB81otLfILAZU_XYXoaA': '2c958a9a1fcd2ca05d46e2f50d4d148b996499e494d444d6b1ae4f2fa589e9bf',
        'o3GVexFtLZADj4Idn1w0S34Bzo': 'f3df4d50f31713405365c7345215e5ff921c11434540950062310a780c477b7c',
        'YtK1kkS4aBf-Yxfc4Dna': 'webPc',
        'y6RycBO1oZLfADX_9tKZXoaA': '1.0.0'
    }       

    liveUrl = 'https://api.pandalive.co.kr/live/'
    #r1 = s.post(liveUrl,data=param3,headers=header2)
    r2 = s.post(liveUrl,data=param2,headers=header2)
    savejson = r2.json()
    print(savejson)
    with open(SAVE_FILENAME, 'w', encoding='UTF-8') as f:
        json.dump(savejson, f, indent=4, ensure_ascii=False)

    print('완료')
  • 무슨 뾰족한 수가 있는 것이 아닙니다. 크롤링 방지같은데 변하면 변하는 값을 넣어줘야지요. 정영훈 2020.2.11 20:56
  • form data 값들을 그대로 넣어줘도 r2의 statuscode가 404 더라구요 그래서 혹시 form data 값들이 실시간으로 계속 변해서 못가져오는게 아닌가해서요 nyw123 2020.2.11 21:44
  • 404는 해당 페이지가 없다는 뜻입니다. form data 이상이라면 보통 500 혹은 403 을 리턴할겁니다. 정영훈 2020.2.11 22:06
  • F12 - 네트워크 - live/에서 Headers를 보면 general에 Request URL: https://api.pandalive.co.kr/live/ ,Request Method: POST, Status Code: 200 이렇게나오는데 왜 404가 나올까요;; nyw123 2020.2.11 22:22
  • 서버측에서 잘못된 요청인 경우 404 로 리턴하도록 프로그래밍한 겁니다. https://api.pandalive.co.kr/live/ 파라미터없이 호출해보세요. 이렇게 하는 이유는 보안 때문입니다. 즉 공격자 입장에서 서버에서 500을 리턴한다면 아 파라미터를 이렇게 조작했더니 서버에서 문제가 발생하는구나..하고 정보를 얻을 수 있기 때문에 404 로 통일해서 리턴하기도 합니다. 정영훈 2020.2.11 23:39
  • post요청에 url 과 header 만 넣었는데도 404를 주네요 crawlUrl = 'https://api.pandalive.co.kr/live/' crawl = requests.post(crawlUrl,headers=header) print(crawl.status_code) nyw123 2020.2.12 00:07
  • 그렇군요 크롤링 방지해둔겁니다. 데이터를 크롤링을 하고 싶다면 첫 페이지의 자바 스크립트부터 분석해서 파라미터들이 어떻해 생성되고 전달되는지 분석해봐야 합니다.(시간이 많이 필요할 수 있습니다.) 만약 골치아프게 자바스크립트로 계산하고 그 결과를 이용하는 경우라면 selenium 을 이용하는 방법을 추천드리고 selenium 은 이용못한다 하면 자바스크립트를 분석해서 파이썬으로 같은 결과를 리턴하도록 마이그레이션 해야 합니다. 일부러 크롤링 못하도록 조치한 것이기에 설령 우회를 해도 또 막힐겁니다. 가장 합리적인 방법은 pandalive.co.kr 측에 문의하여 공식적인 방법을 이용하는 겁니다. 정영훈 2020.2.12 00:16
  • 감사합니다 자바스크립트는 몰라서 selenium 으로 도전해봐야겠네요 nyw123 2020.2.12 00:22
  • 자바스크립트를 모르면 크롤링을 잘 할 수 없습니다. http 프로토콜, 자바스크립트를 잘 알고 있어야 크롤링을 할 수 있습니다. 잘되던 사이트들도 어느순간 막힐텐데 문제를 해결하려면 자바스크립트는 필수입니다. 정영훈 2020.2.12 00:54

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.