gpt4 book ai didi

web-scraping - 网上抓取:从“统计信息”标签中获取Youtube视频的份额

转载 作者:行者123 更新时间:2023-12-03 05:27:42 25 4
gpt4 key购买 nike

有人知道一种分享YouTube视频(不是我的视频)的方法吗?我想将它们存储到数据库中。它不适用于yt api。另一个问题是,并非每个YouTube视频都有“统计信息”标签。

到目前为止,我尝试了Youtube API,jsoup HTML Parser(显示共享的div不在那儿,尽管它是通过firefox等工具中的show进行显示的)和import.io演示都可以运行,但是绝对太昂贵了。

Thats what I would like to extract

最佳答案

最好的方法是查看网络日志,在这种情况下,它在上显示POST:

https://www.youtube.com/insight_ajax?action_get_statistics_and_data=1&v=$video_id

它在主体中发送XSRF token ,该主体在视频页面 https://www.youtube.com/watch?v=$video_id的原始HTML主体中的javascript对象中可用:

yt.setConfig({
'XSRF_TOKEN': "QUFFLUhqbnNvZUx4THR3eV80dHlacV9tRkRxc2NwSjlXQXxBQ3Jtc0ttd0JLWENnMjdYNE5IRWhibE9ZdDJTSk1aMktxTDR5d3JjSnkzVUtQWVcwdnp3X0tSOXEtM3hZdzVFdjNPeGpPRGtLVU5pVXV0SmtfdWJSUHNqTVg2WXBndjZpa3d6U25ja2FTelBBVWRlT0lZZkRDaDV6SU94VWE3cnpERHhWNVlUYWdyRjFqN1hvc0VLRmVwcEY3ZWdJMWgyUmc=",
'XSRF_FIELD_NAME': "session_token",
'XSRF_REDIRECT_TOKEN': "VlhMkn6F56dGGYcm4Rg7jCZR0vJ8MTQ5ODA1NzIwMkAxNDk3OTcwODAy"
});

它还需要在同一视频页面中设置一些cookie。

使用

:

import requests
from bs4 import BeautifulSoup
import re

s = requests.Session()

video_id = "CPkU0dF4JKo"

r = s.get('https://www.youtube.com/watch?v={}'.format(video_id))

xsrf_token = re.search("'XSRF_TOKEN'\s*:\s*\"(.*)\"", r.text, re.IGNORECASE).group(1)

r = s.post(
'https://www.youtube.com/insight_ajax?action_get_statistics_and_data=1&v={}'.format(video_id),
data = {
'session_token': xsrf_token
}
)
metrics = [
int(t.text.encode('ascii', 'ignore').split(' ', 1)[0])
for t in BeautifulSoup(r.content, "lxml").find('html_content').find("tr").findAll("div", {"class":"bragbar-metric"})
]
print(metrics)

使用

pupxml_grep:

以下bash脚本将:
  • 使用 https://www.youtube.com/watch?v=$video_id 请求视频页面curl
  • 将cookie存储在名为cookie.txt
  • 的文件中
  • 使用 XSRF_TOKEN
  • 在以下请求中提取称为 session_tokensed
  • 要求视频统计页面https://www.youtube.com/insight_ajax?action_get_statistics_and_data=1&v=$video_id curl 以及先前存储的cookie
  • 解析xml结果,并使用 CDATA
  • 提取 xml_grep部分
  • 使用pup解析html以提取bragbar-metric类div,然后使用json{}
  • 将html结果转换为json
  • 使用 sed 删除Unicode字符

  • 剧本 :

    video_id=CPkU0dF4JKo

    session_token=$(curl -s -c cookie.txt "https://www.youtube.com/watch?v=$video_id" | \
    sed -rn "s/.*'XSRF_TOKEN'\s*:\s*\"(.*)\".*/\1/p")

    curl -s -b cookie.txt -d "session_token=$session_token" \
    "https://www.youtube.com/insight_ajax?action_get_statistics_and_data=1&v=$video_id" | \
    xml_grep --text_only 'html_content' | \
    pup 'div table tr .bragbar-metric text{}' | \
    sed 's/\xc2\x91\|\xc2\x92\|\xc2\xa0\|\xe2\x80\x8e//' | \
    sed 's/\s.*$//'

    它提供了观看次数,观看时间,订阅次数和份额:
    120862
    454
    18
    213

    关于web-scraping - 网上抓取:从“统计信息”标签中获取Youtube视频的份额,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44646802/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com