##背景
近年,様々な動画サイトが誕生している.
各サイト工夫を凝らしているが,その工夫が各ユーザに対してフィットしているとは言い難い.
そこで,動画サイトにある動画情報だけをWebスクレイピングで収集し,
収集したデータからユーザが使いやすいようにデータを加工できれば有用でないかと考えた.
##目的
動画サイトにある動画情報を収集するWebスクレイピングプログラムを作成する
##構築
・Python 3.0
・selenium webdriver
・Microsoft Edge
##必要な事
1.特定のサイトを把握
2.そのサイトの構造を把握
3.何を出力したいか(動画のタイトル,id,タグなど)
##実践
以下の点に注意
1.csvファイルに出力していますが,出力先などは個人のお好きなように
2.webdriverはEdge,Firefoxなどに対応
3.このプログラムでは動画のid,タイトル,現在の日付をファイルに書き込んでいます
各サイトでHTML/CSSの構造は異なるのでしっかりと個々のサイトに対応するようにしましょう!!
from selenium import webdriver
import numpy as np
import pandas as pd
import datetime
import sys
sys.setrecursionlimit(10000)
today=datetime.date.today()
#csvファイル(既存データ)の読み込み
df=pd.read_csv("既存データ先")
#df=pd.DataFrame(index=[],columns=["id","name","date"])
#ブラウザ開く(most-popular today)
driver=webdriver.Edge('webdriverのインストール先')
for i in np.arange(1,11):
if i==1:
driver.get("対象のスクレイピング先")
else:
a="対象のスクレイピング先/%s/" % str(i)
driver.switch_to.default_content() #最上位に戻す
driver.get(a)
# time.sleep(5)
#動画のリスト取得
l=driver.find_element_by_class_name("wrapper")
l=l.find_element_by_class_name("main")
l=l.find_element_by_class_name("row row3")
l=l.find_element_by_class_name("content")
l=l.find_element_by_class_name("thumbs-items")
#そのページの動画一覧
for i in l.find_elements_by_class_name("thumb"):
a=i.find_element_by_tag_name("a")
index=a.get_attribute("href").find('/',27)
#id,nameをDataFrameに追加
df=df.append(pd.DataFrame([[int(a.get_attribute("href")[27:index]),a.get_attribute("href")[index+1:-1],today.isoformat()]],columns=["id","name","date"]),ignore_index=True)
#df.append(df2,ignore_index=True)
#重複データの削除(前残し)
df=df.drop_duplicates(["id"])
#dataframeの出力
df.to_csv("csvファイル出力先",index=False)
driver.close()
driver.quit()
##終わりに
上記のプログラムでは動画のidとタイトルを出力していましたが,プログラムを書き換えればタグや再生回数なども抽出できます.
もし,ある動画サイトを使用していて使いにくいと感じたら,スクレイピングを行い自分好みにカスタマイズする必要があるでしょう.
今後は蓄積したデータからフィルタ処理を行っていきたいと思います.
それでは!!
以下,Githubで公開しているURLです.
https://github.com/minna30waiwai/web-scraing-movie-site