YouTube Comment Kaparó 400 válasz

szavazat
0

Próbálom kaparja a megjegyzéseket a YouTube videó, de kapok egy 400 válasz-hiba. Úgy működik, de attól függően, hogy a videó nem tudok már a 3.-5 oldalt. Én izolálása mind a lekérdezési karakterlánc és Űrlapadat helyesen használt amikor ellenőrzöm Chrome dev-tools, de valamilyen oknál fogva, kapok vissza 400 közepe táján módon. Mit csinálok rosszul? Tudom YouTube egy API, de a korlátozások hagyva engem kaparja helyett. Van egy idősebb script, ami nagyon jól működik, így tudom, hogy meg lehet csinálni anélkül, szelén vagy a YouTube API, de most, hogy próbálok frissíteni a kódot kell használni https://www.youtube.com/comment_service_ajax?action_get_comments=1, hanem a régebbi 'https://www.youtube.com/comment_ajax'én fut be a problémákat. írja

import os
import sys
import requests
import time
import json
from bs4 import BeautifulSoup
from unidecode import unidecode
from pprint import pprint
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry

USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36'

def find_token(html, key, num_chars=2):
    pos_begin = html.find(key) + len(key) + num_chars
    pos_end = html.find('', pos_begin)
    return html[pos_begin: pos_end]


def request_session(video_url):
    session = requests.Session()
    session.headers['User-Agent'] = USER_AGENT
    retry = Retry(connect=3, backoff_factor=0.5)
    adapter = HTTPAdapter(max_retries=retry)
    session.mount('http://', adapter)
    session.mount('https://', adapter)
    s = requests.Session()
    s.headers['User-Agent'] = USER_AGENT
    r = s.get(video_url)
    html = r.text
    return html, s

def create_params(ctoken, itct):
    params = {'action_get_comments':1,'pbj':1,'ctoken':ctoken,'continuation':ctoken, 'itct':itct}
    return params

def ajax_request(session, url, params, data, retries=1, sleep=1):
    for _ in range(retries):
        response = session.post(url, params=params, data=data)
        print(response.status_code)
        print(response.url)
        if response.status_code == 200:
            response_dict = json.loads(response.text)
            return response_dict['load_more_widget_html'], response_dict['content_html']
        else:
            time.sleep(sleep)

def intial_html_page(video_url):
    intial_html, session = request_session(video_url)
    session_token = find_token(intial_html, 'XSRF_TOKEN', 4)
    ctoken = find_token(intial_html, 'COMMENTS_TOKEN', 4)
    itct = find_token(intial_html, 'itct', 4)
    return session, session_token, ctoken, itct

video_url_0 = 'https://www.youtube.com/watch?v=plv1CgaGm9Q'


url = 'https://www.youtube.com/comment_service_ajax?'
html_list = []

session, session_token, ctoken, itct = intial_html_page(video_url_0)
data = {'session_token': session_token}
params = create_params(ctoken, itct)

continue_loading = True

while continue_loading:
    widget, ajax_html = ajax_request(session, url, params, data)
    html_list.append(widget)

    load_more_href = find_token(widget, 'data-uix-load-more-href=', 1)
    itct = find_token(widget, 'data-sessionlink=itct=', 0)
    ctoken = find_token(widget, 'page_token', 1)
    load_more_TF = find_token(widget, 'data-uix-load-more-post', 2)
    params = create_params(ctoken, itct)
A kérdést 02/09/2018 05:25
a forrás felhasználó
Más nyelveken...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more