2017-06-20 54 views
1

有沒有人知道一種工具或方式來獲取youtube視頻(不是我的)的股份?我想將它們存儲到數據庫中。它不適用於yt api。另一個問題是,並非每個yt視頻都有統計信息選項卡。網絡抓取:從統計選項卡中獲取Youtube視頻的股份

到目前爲止,我嘗試了Youtube API,jsoup HTML Parser(顯示股票的div不存在,儘管它通過firefox中的inspect顯示),而import.io演示正在工作,但肯定太昂貴。

Thats what I would like to extract

謝謝!

+0

問題,要求我們建議還是找一本書,工具,軟件庫,教程或其他關閉網站資源是堆棧溢出的主題,因爲它們傾向於吸引自以爲是的答案和垃圾郵件。相反,請描述問題以及到目前爲止解決問題所做的工作。 – DaImTo

回答

3

最好的辦法是看網絡日誌,在這種情況下,它顯示了一個POST上:

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

它發出了一個XSRF令牌在體內即在視頻的原始HTML體內可用https://www.youtube.com/watch?v=$video_id網頁的JavaScript對象,如:

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

它也需要在這同一個視頻頁面中設置一些餅乾。

以下bash腳本會:

  • 請求視頻頁面https://www.youtube.com/watch?v=$video_idcurl
  • 保存到一個名爲cookie.txt
  • 文件中的Cookie提取下面的請求被稱爲session_tokenXSRF_TOKENsed
  • 請求視頻統計頁面https://www.youtube.com/insight_ajax?action_get_statistics_and_data=1&v=$video_idcurl與餅乾預先viously存儲
  • 解析XML結果提取CDATA部分與xml_grep
  • 解析HTML與pup提取bragbar-metric類股利和轉換HTML結果與json{}
  • 使用jq JSON解析器JSON提取text場(它包含所得的視圖值,時間觀看,訂閱,股)
  • 使用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 json{}' | \ 
    jq -r '.[].text' | \ 
    sed 's/\xc2\x91\|\xc2\x92\|\xc2\xa0\|\xe2\x80\x8e//' 

它給出的意見數量,觀看時間,訂閱股份:

120862 
454 
18 
213