有没有人知道如何获取YouTube视频的分享(不是我的)?我想将它们存储到数据库中。它不适用于yt api。另一个问题是并非每个视频都有统计信息标签。
到目前为止,我尝试了Youtube API,jsoup HTML Parser(显示共享的div不存在,尽管它通过firefox中的inspect显示,例如)和import.io demo正在运行,但绝对太贵了。< / p>
答案 0 :(得分:4)
最好的方法是查看网络日志,在这种情况下,它会显示POST
:
https://www.youtube.com/insight_ajax?action_get_statistics_and_data=1&v=$video_id
它在一个javascript对象中的视频页面https://www.youtube.com/watch?v=$video_id
的原始html正文中可用的正文中发送一个XSRF令牌,如:
yt.setConfig({
'XSRF_TOKEN': "QUFFLUhqbnNvZUx4THR3eV80dHlacV9tRkRxc2NwSjlXQXxBQ3Jtc0ttd0JLWENnMjdYNE5IRWhibE9ZdDJTSk1aMktxTDR5d3JjSnkzVUtQWVcwdnp3X0tSOXEtM3hZdzVFdjNPeGpPRGtLVU5pVXV0SmtfdWJSUHNqTVg2WXBndjZpa3d6U25ja2FTelBBVWRlT0lZZkRDaDV6SU94VWE3cnpERHhWNVlUYWdyRjFqN1hvc0VLRmVwcEY3ZWdJMWgyUmc=",
'XSRF_FIELD_NAME': "session_token",
'XSRF_REDIRECT_TOKEN': "VlhMkn6F56dGGYcm4Rg7jCZR0vJ8MTQ5ODA1NzIwMkAxNDk3OTcwODAy"
});
它还需要在同一个视频页面中设置一些cookie。
beautifulsoup&amp; python-requests:
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)
以下bash脚本将:
curl
https://www.youtube.com/watch?v=$video_id
cookie.txt
sed
XSRF_TOKEN
的{{1}}
curl
请求视频统计信息页session_token
以及之前存储的Cookie xml_grep
https://www.youtube.com/insight_ajax?action_get_statistics_and_data=1&v=$video_id
部分
CDATA
类div并使用bragbar-metric
sed
删除unicode字符剧本:
json{}
它提供了观看次数,观看时间,订阅,分享:
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.*$//'