YouTube(4)からの続き
ユーチュラのランキングからYouTuberの分析をするため,手動のデータスクレイパーをPerlで書いてみた。迷惑にならないように,1秒のsleepを入れながらHTMLファイルにアクセスしている。取得したデータを眺めてみた結果についてはもう少し考えてから報告する予定。
HTMLファイルから必要なデータだけ抜き出したCSVファイルを作るのだけれど,その後はExcelで解析する。面倒なのは,ExcelがUTF-8のCSVファイルを読んでくれないこと。ごちゃごちゃすれば回避できそうだが,それくらいなら事前にShift-JISに変換したほうが早い。
- - - - - - - - - - - - - - - - - - - -#!/usr/local/bin/perl
# 1/30/2021 K. Koshigiri
# usage: yutura.pl 1 10
# extract data from p=1 to p=10
# original data = https://ytranking.net/ranking/?p=x
\$ytr = "https://ytranking.net/ranking/";
\$p1=$ARGV[0];
\$p2=$ARGV[1];
\$tmp="tmpy-\$p1-\$p2";
system("touch \$tmp");
\$out = "ytr-\$p1-\$p2.csv";
for(\$p=\$p1; \$p<=\$p2; \$p++) {
# system("lynx -source \$ytr\?p=\$p | fsp -u >> \$tmp");
# sleep 1;
print "\$p,\n";
}
open(OUT, ">\$out");
open(IN, "<\$tmp");
while() {
if(/\t<p class="title">(.*)<\/p>\t<aside>/) { if(/">play_circle_filled<\/i>(.*)<\/span>万(.*)回</) {
\$play=\$1*10000+\$2;
}
if(/">play_circle_filled<\/i>(.*)<\/span>億(.*)<\/span>万(.*)回<\/p>/) {
\$play=\$1*100000000+\$2*10000+$3;
}
if(/">videocam<\/i>(.*)<\/span>本<\/p>/) {
\$video=\$1;
print OUT "\$title,\$video,\$people,\$play\n"; }
if(/">videocam<\/i>(.*)<\/span>万(.*)本<\/p>/) {
\$video=\$1*10000+\$2;
print OUT "\$title,\$video,\$people,\$play\n"; }
}
close(IN);
close(OUT);
- - - - - - - - - - - - - - - - - - - -
# 1/30/2021 K. Koshigiri
# usage: yutura.pl 1 10
# extract data from p=1 to p=10
# original data = https://ytranking.net/ranking/?p=x
\$ytr = "https://ytranking.net/ranking/";
\$p1=$ARGV[0];
\$p2=$ARGV[1];
\$tmp="tmpy-\$p1-\$p2";
system("touch \$tmp");
\$out = "ytr-\$p1-\$p2.csv";
for(\$p=\$p1; \$p<=\$p2; \$p++) {
# system("lynx -source \$ytr\?p=\$p | fsp -u >> \$tmp");
# sleep 1;
print "\$p,\n";
}
open(OUT, ">\$out");
open(IN, "<\$tmp");
while(
if(/\t<p class="title">(.*)<\/p>\t<aside>/) {
\$play=\$1*10000+\$2;
}
if(/">play_circle_filled<\/i>(.*)<\/span>億(.*)<\/span>万(.*)回<\/p>/) {
\$play=\$1*100000000+\$2*10000+$3;
}
if(/">videocam<\/i>(.*)<\/span>本<\/p>/) {
\$video=\$1;
print OUT "\$title,\$video,\$people,\$play\n";
if(/">videocam<\/i>(.*)<\/span>万(.*)本<\/p>/) {
\$video=\$1*10000+\$2;
print OUT "\$title,\$video,\$people,\$play\n";
}
close(IN);
close(OUT);
- - - - - - - - - - - - - - - - - - - -
0 件のコメント:
コメントを投稿