Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

N高の授業で行ったスクレイピングをまとめてみた

N高に入って9ヶ月が過ぎ、プログラミングでも、自分がしたいことがようやく形になったので、アドバンスカレンダーといういい機会にまとめてみようと思います。
プログラミングはまるっきり初心者なので、大目にみてください。

スクレイピングをやってみた

N予備校をはじめたあと、とりあえず何か書いてみようと思い、実況パワフルプロ野球というスマホゲームに登場する選手の能力を、全て手打ちでHTML方式で書いてみました。
とりあえず全てのキャラを書き終えたのですが、ソーシャルゲームなので、日々新選手が登場します。
これを一々確認して追記して行くのは面倒だと思い、アプリ攻略を行なっているgamewithの記事から、必要な情報を取ってこようと考えたのが、スクレイピングをしようと思ったきっかけです。

使用したツール等

  • Node.js
    • バージョンは6.11.1
  • cheerio-httpcil
    • スクレイピングを非常に便利にしてくれました
  • hubot
    • botを使って送信させました

コード

hubotを起動しているslackにfile>と送信すると、そのサイトから特定してある部分の内容を、それぞれの形式でファイルにし、自動保存します。

scraping.js
'use strict';
var client = require('cheerio-httpcli');
const fs = require('fs');
const path = require('path');

module.exports = (robot) => {
    robot.hear(/file>/i, (msg) => {
        client.fetch('https://xn--odkm0eg.gamewith.jp/article/show/80449', function (err, $, res, body) {

            const title = $('title').text();
            const table = $('#article-body > div.js-accordion-area.accordion-area > table').html();
            const status = $('#article-body > div:nth-child(15) > table').text();

            // ファイル名
            const file_name = '/newfile.html';
            // 書き込み先のパス
            // __dirname: 現在実行中のソースコードが格納されているディレクトリパス
            // 自分で分かりやすいパスに変更して OK
            const file_path = path.join(__dirname + file_name);
            // 書き込み内容
            const content = (title + table + status)

            fs.writeFileSync(file_path, content);
            msg.send('File created');
        });
    });
};
newfire.html
【パワプロアプリ】村雨(むらさめ)の評価とイベントとコンボ | GameWith【パワプロ】<tr><th>レベル</th><th>ボーナス</th></tr><tr><th>Lv.1</th><td>初期評価10(SR),15(PSR)<br>タッグボーナス70%<br>コツイベントボーナス40%</td></tr><tr><th>Lv.5</th><td>初期評価20(SR),25(PSR)</td></tr><tr><th>Lv.10</th><td>タッグボーナス90%</td></tr><tr><th>Lv.15</th><td>コツレベルボーナス2</td></tr><tr><th>Lv.20</th><td>初期評価30(SR),35(PSR)</td></tr><tr><th>Lv.25</th><td>やる気効果アップ75%</td></tr><tr><th>Lv.30</th><td>初期評価40,45(PSR)</td></tr><tr><th>Lv.35</th><td><span style="color:orange;">守備侍</span><br>(技術ボーナス,守備力のコツ)<br>タッグボーナス100%</td></tr><tr><th>Lv.37<br>(SR上限開放時)</th><td>初期評価45</td></tr><tr><th>Lv.40<br>(SR上限開放時)</th><td>初期評価50(SR),55(PSR)</td></tr><tr><th>Lv.42<br>(PSR上限開放時)</th><td>タッグボーナス105%</td></tr><tr><th>Lv.45<br>(SR,PSR上限開放時)</th><td>タッグボーナス110%</td></tr><tr><th>Lv.50<br>(PSR上限開放時)</th><td>タッグボーナス120%</td></tr>評価点7.0点得意練習肩力役割(役割一覧)イベント後イベ(イベキャラ前後一覧)金特ジャストフィット(確定)アイコンタクト(確定)コンボ柳生鞘花楽譜パワフル高校2011投手:ディレイドアーム野手:つるべ打ち(入手できる楽譜一覧)所持コツ送球◯/ レーザービーム/ 守備職人/ 一発逆転/ 守備力

これで newfile.html として、村雨くんの能力をファイルとして書き出してくれます。

今後取り組みたい点

  • cronやHubotcronなどでの定期実行
  • URLを自動で設定

まとめ

心斎橋のTAの人に教えてもらいながらですが、とてもいいものができました。
これからも改良して、もっといいものを作っていきたいです。

記事を書くにあたり実況パワフルプロ野球、GameWithの利用規約を確認させていただきました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
2
Help us understand the problem. What are the problem?