スクレイピングとは、ウェブサイトから情報を抽出するコンピュータソフトウェア技術のこと。らしいです。Wikipediaによると。
というわけで、情報集めを自動化できるようになりたいなぁってことで、練習練習。
目標:yahooニュースから更新されている記事の本文を取得する。
今回使うのはseleniumですね。ブラウザを自動操作できるテストツールらしいです。
水銀中毒に効きそうないい名前ですね!
pip install seleniumでインストールして、動かすためのブラウザも用意します。
このページからchromedriver.exeをダウンロード、カレントディレクトリーに置いておきます。
まずは必要そうなライブラリーをimportして、googlechromeでヤフーニュースのゲームタグを開きました。
"https://news.yahoo.co.jp/hl?c=game"
URLを変えれば好きなページでスクレイピングできます。
さて、開いたページから欲しそうな情報をどんどん引き抜いていきす。
とりあえず、記事のタイトルとURLが欲しいかな?
欲しい要素を右クリックして、検証を選んで

これだって感じのhtmlの行を見つけたら右クリックして、CSSセレクタをゲット。
CSSセレクタは要素を選択するための条件式みたいなものっぽい。
GoogleChromeは、html読まなくても、見つけられるから便利便利。
URL
#main > div.epCategory > div > ul > li:nth-child(1) > a
タイトル
#main > div.epCategory > div > ul > li:nth-child(1) > a > div > div.listFeedWrapCont > dl > dt
こんな感じのCSSセレクタがゲットできました。
find_elements_by_css_selector()という関数で、htmlを手に入れられるのでこんな感じで。
これ、取り出す要素が一つでもリストで帰ってくるのか...
li:nth-child(1)の1って数字が記事の1番目を指している気がするので、ここを変えれば全部の記事のタイトルとURLが手に入れられる気がする。
なんか、参考書で似たようなことをやるときにnth-of-type(n)って表記していたから、数字の代わりにnを入れれば、全部の要素を取り出せそう。
いいかんじ
このURLにをgooglechromeで開いて、記事の本文を見つければよさそう。
さっきやったことを繰り返して。
手に入れたURLをdriver.get()でページを開く。
タイトルと本文をリストに追加して、ページの情報をゲットです。
やっとできた。
<おまけ>
・前回起動したときなかった記事だけ欲しい
・記事をデータベース化して保存しておきたい
・ボイスロイドに読ませたい
って感じでコーディング