Web、サーバ、ソフトウェア、バグ・脆弱性 などの情報を何人かで集まって書いていく IT/Web情報系ブログ

【C#】スクレイピングツール「ScrapeHuman」ver2.0.0

投稿日:   最終更新日:2017/09/03  投稿者:ktm@s

最新バージョン:2.1.0(本記事でDL可能)

以前、あまりのネタのなさにスクレイピングソフトを公開した。

2017年08月21日追記UIや機能を改善したver2が公開されています。以下のページを参照してください。最近とあるサイトからデータを拝借したかったけど30ページ以上に分かれており、構造としては同じなものの、タグにclassがうじゃうじゃついていて面倒という事があった。ちょうどUWSCで似たような処理を書いた後だったので、そのコードを流用してURL入力で不要な文字列をカットしてクリップボードにぶち込むようにしたのだけど、せっかくなのでブログのネタとして公開することにした。構造が同じ複数のページから情報をまとめて引っこ抜...

これはその時たまたまUWSCでコード書いてたからという理由だけでUWSCで作られたソフトで、元々自分がちょっとしたデータ収集・整形作業をする必要がある時に作った非常にお粗末なコードをそのまま流用したものだった。

しかしこんなツールも使った人が居るらしく、バグや機能面の要望のメール・コメントをいただいた。反応があるというのは大変うれしい。

今回はそれに答えるべく新たにC#で書き直して要望に対応した。
正直な話、プログラマでもシュミグラマでもないオブジェクト指向アレルギーの自分がC#を書くことになるとは思わなかったが、触ってみれば意外といけるもので4日ほどで完成した。
(ちなみにオブジェクト指向の概念は今でもわからないが動くからいい)

ScrapeHumanとは

ScrapeHumanはウェブサイトから好きな情報を拾ってきて自動で保存してくれるツール。
HTMLタグカットやNGワード設定などができ、特定のサイトの特定の情報だけを保存できる。

主な機能

  • 複数URLの設定
  • UserAgent選択
  • 開始ワード・終了ワード設定によるデータのトリミング
  • n個目の一致結果の取得
  • 一致するもの全ての取得
  • HTMLタグ除去
  • NGワード設定
  • 設定保存・読み込み(INI)
  • 保存した設定を使用した自動実行

ver1.5.1からの主な変更点

  • UIの大幅な改善
  • INIファイルのキーや値の変更(互換性はありません)
  • 保存先が./data/URL/タイムスタンプ.txtに統一された
  • 一致するものを全て取得するオプションを作った(じょんどーさんからの要望)
  • エラー時にストップでなくスキップしてログ出力するようにした(ichinoseさんからの要望)

スポンサーリンク

ダウンロードとインストール

ダウンロードは以下のリンクから。修正・改変・再配布などは禁止です。
インストールはダウンロードしたzipファイルを適当なフォルダに解凍するだけです。
アップデートは中身を上書きしてください。

アンインストールはフォルダごと削除してください。レジストリは使用していません。

“ScrapeHuman” をダウンロード

ScrapeHuman_v2.1.0.zip – 1228 回のダウンロード – 21.46 KB
(ダウンロードカウンターはScrapeHuman ver2.0.0からの累積です)

もしくはVectorからもダウンロード可能。
(Vectorは最新バージョンの反映が遅い可能性があります)

データ収集に便利な機能を付けたスクレイピングツール

使い方

初回起動時

初回起動時には「ScrapeHuman.ini」と「error.log」が自動的に作成されます。

ScrapeHuman.iniには手動もしくはScrapeHumanから設定を保存できます。
error.logには問題が発生した際のエラーが表示されます。
よくあるだろうエラーには番号がふってありますので、エラー周りでご質問の際にはエラー番号があれば教えてください。

使い方

使い方の流れ。

1.URL入力

URL入力欄にhttp://もしくはhttps://から始まるデータ取得したいページのURLを入力します。
複数のURLに対して同一の処理を行いたいときは改行して次のURLを入れていってください。

2.HTMLソースの取得

「HTMLソース取得」ボタンを押すことで対象のHTMLソースがHTMLソース表示用のタブに表示されます。
URLの中のどれか1つでも正常に取得できた場合に「実行」ボタンが有効になります。

3.開始ワード・終了ワードの選択

どこからどこまでを取得したいかをHTMLソースを見ながら考え、設定します。
両方空であれば全てが、開始が空であれば最初から終了ワードまで、終了が空であれば開始ワードから最後までが保存されます。

4.オプション選択

取得/保存オプションを設定します。
NGワードは「NGワードを設定する」にチェックを入れないと有効にならないので注意してください。

5.実行する

実行ボタンを押すと、選んだ設定でデータの取得、加工、保存までが一気に行われます。
データはScrapeHumanがあるフォルダにdataというサブフォルダが作られ、その中にURLごとのフォルダが作られ、さらにその中にあります。
「全ての実行結果を1つのテキストに保存する」オプションが有効の場合は、さらにallサブフォルダが作られその中に保存されます。

この設定でまた自動取得したい場合は「設定保存」ボタンを押すことで次回から簡単に読み込みできます。

保存されている設定を使う

URL入力欄の右上に設定を選択できるボックスがあるので任意の設定を選んでください。

自動実行させたい

タスクスケジューラを使って決まった日時に定期実行させたい場合や、使う設定が決まっているので毎回起動してボタンを押したくない場合など、INIファイルに設定を記載することで設定を選んだりボタンを押すことなく実行されるようになります。

ScrapeHuman.iniに以下のセクションを手動で追加してください。
数字は自動実行したい設定の番号になります。

[高度な設定]
自動実行=yes,1

ScrapeHuman.ini各項目

手動で編集したい場合など。

#設定番号は10000まで対応しており、任意の番号を設定できます
[設定1]

#URLを複数入れる際は「,」区切りになります。
URL=https://vivibit.net/scrapehuman2/,https://vivibit.net/

#UserAgentは1-5まで、上から何番目の設定を使うかです
UserAgent=1

#開始ワードを入力します
開始ワード=<body>

#終了ワードを入力します
終了ワード=</body>

#対象ページの文字コードをUTF-8,SHIFT_JIS,EUC-JPから選択します
文字コード=UTF-8

#n個目の一致を使う場合yesを入れます
n個目の一致=

#何個目に一致したものが欲しいか半角数字を入れます
n個目=

#一致するもの全て取得する場合yesを設定しますがn個目と同時設定できません
一致するもの全て取得=

#ファイルではなくクリップボードに入れたい場合yesを設定します
クリップボードに保存=

#全ての実行結果を1つのテキストに保存したい場合yesを設定します。
全ての実行結果を1つのテキストに保存=

#HTMLタグ除去機能を使いたい場合yesを設定します
HTMLタグ除去=yes

#NGワード設定を有効にする場合yesを設定します
NGワード設定=yes

#NGワードを「,」区切りで入力します
#現状NGワードに「,」は指定できません
NGワード=a,b,c,です,ます

その他

Q&A

質問があるたび追加します。

Q.動かない

A.動くよ(.NET Framework 4.5があれば間違いなし)

Q.変わった名前ですね

A.知る人ぞ知る神サービスに影響を受けています。

Q.文字化けする

A.文字コードを対象ページのエンコードにあわせて設定(わからなかったら色々試す)

日本語URLでエラーがでる

A.日本語が含まれるURLでエラーが出るのは現時点で仕様です。
URLエンコードすることで利用可能になります。

Q.UserAgentの種類を教えて

A.上からWin,Mac,iPad,iPhone,Androidとなっています。

  1. Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)
  2. Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36
  3. Mozilla/5.0 (iPad; CPU OS 9_0_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13A404 Safari/601.1
  4. Mozilla/5.0 (iPhone; CPU iPhone OS 9_0 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13A344 Safari/601.1
  5. Mozilla/5.0 (Linux; Android 7.1.1; SOV35 Build/41.2.C.0.162; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/55.0.2883.91 Mobile Safari/537.36

自動実行は保存した後自動終了するんですか?

A.はい、自動実行設定を有効にした後ScrapeHumanを起動させると、取得から終了までを自動で行いプログラムは自動的に終了します。

アップデート情報

■2017年09月03日 ver2.1.0
・全ての実行結果を1つのテキストに保存するオプションの実装(OORさんからのご要望)
・UIの微調整
・URLが長い場合にWindowsのフォルダ名上限を超えて例外が発生する不具合の修正(melonpandaさんにご指摘いただきました)

■2017年08月29日 ver2.0.2
・INIファイルからURLを読み込む際に256文字で途切れていたバグを修正(OORさんにご指摘いただきました)

■2017年08月22日 ver2.0.1
・URL入力欄及びログ欄の32767文字制限の撤廃(ichinoseさんにご指摘いただきました)

■2017年08月21日 ver2.0.0
・ScrapeHuman ver2.0.0 公開

バグ報告・質問・要望など

何らかの連絡を希望される場合、この記事のコメント欄かktm@s宛にメールしてください。

エラーも出力されずに本体が終了してしまうようなバグには早急に対応したいと思います。
可能な限りで結構ですので詳細な報告をお願いします。

ご要望には対応できるかわかりませんが検討はします。

- C#

Comment

  1. nk_evil より:

    気になるあの子の郵便受けをスクレイピングする機能はいつになったらつくんですか!!!!!!!!11

  2. ichinose より:

    改善要望を上げた者です、期待通りの動きで感動しました!

    • ichinose より:

      すいません、使ってみて気づいたのですが、URL入力欄に入力制限(何文字かわかりませんが)があるようで、大量のURLをセットすると途中で切れてしまいます。もう少し拡張してもらえるとありがたいです。

      • ktm@s より:

        報告ありがとうございます。
        URL上限の件、未テストでした。調査・修正したいと思います。
        報告感謝します。

      • ktm@s より:

        ver2.0.1を公開したのでお試しください。
        恐らく32767文字が上限になっていたと思われますが上限を撤廃しました。

        こちらでも試しておりますが、万が一状況が変わらないようでしたら大変お手数ですが再度ご報告ください。

  3. OOR より:

    120ほどあるURLを3つ入力し実行できましたが
    設定保存して再度開くと3つ目のURLが切れてました。
    可能であれば対応お願いします。

    • ktm@s より:

      報告ありがとうございます。時間があき次第確認します。

    • ktm@s より:

      ver2.0.2を公開したのでお試しください。
      INIファイルからURLを読み込む際に256バイト制限があったバグを修正しました。
      修正後の最大値は100MBです。

      • OOR より:

        早速の対応ありがとうございます!
        問題なく動きました^^

        今後機能追加など予定あればURLごとのテキストをまとめてひとつのテキストに保存できるようになればうれしいです。

        今後とも使わせてもらいます。感謝です。

        • ktm@s より:

          動いてよかったです。
          ご要望の機能は検討してみます。

        • ktm@s より:

          実装は簡単だと思うので前向きに考えているのですが、ひとつのテキストに纏める際に区切りは改行でよいのでしょうか?
          ————————————————————–
          それとも例えばこのように境目がわかるようにしたいですか?

          • OOR より:

            個人的にはそのままデータとして使いたいんで余計な文字が入るよりは改行だと助かります!

        • ktm@s より:

          ver2.1.0を公開したのでお試しください。
          ご要望のオプションを実装しました。

          • OOR より:

            返事遅くなりましたが実装ありがとうございます!
            早速試したところイメージ通りの仕上がりで感動しております。
            今後とも長く使わせて貰います。ありがとうございました^^

  4. melonpanda より:

    素晴らしいツールですね!ありがたく使わさせていただきます。

    要望
    URLが長すぎると自動生成される結果フォルダがWindowsルールでフォルダ名オーバーでエラーになり作成されません。短縮URLを利用することで解決できましたが、一応ご報告まで!

  5. melonpanda より:

    度々質問で申し訳ないのですが、自動実行の場合、結果ファイルが保存完了すると自動終了する感じでしょうか?自動終了の説明になかったので一応確認です。

  6. Yamada より:

    突然失礼いたします。
    Ver2.1.0の自動実行について、
    記載手順通りにIniファイルに追記したところプログラムが動かず、
    「 [高度な設定] 」 行を消して、
    「 自動実行=yes,1 」だけ追記するとプログラムは動きました。

    上記状態で既存設定1の存在確認後、タスクスケジューラ経由で起動させると、
    既存設定1が読み込まれず、
    プログラムウインドウ下のバーに「起動時の設定に失敗しました」表示が出ました。
    手順がおかしいのかその他の要因なのかご存じであれば教えていただけないでしょうか?
    お手数ではございますが、よろしくお願い申し上げます。

    環境
    OS:Win7Pro
    .NET Framework:4.5
    テストURL(表データの取得目的):http://nlftp.mlit.go.jp/ksj/gml/codelist/PrefCd.html

  7. step より:

    複数URLを簡単に設定できてすごく便利!!とても助かっています。
    追加してほしい機能があるので、ご検討よろしくお願いします。

    要望:〇×秒に1リクエストみたいなsleep機能が欲しい
    やりたいこと:大量のページを相手に負荷をかけない程度にゆっくり巡回する

    • ktm@s より:

      ScrapeHumanのご利用ありがとうございます。
      ご要望の機能について、個人的にも必要と感じるので実装します。
      ただし実装次期について具体的にはいえません(報告頂いた幾つかの不具合も現状放置しています)のでご了承ください。
      やる気と戦っております。

      • step より:

        実装予定感謝!ありがとうございます!
        やる気と戦う、すごくわかります(笑)ので、ゆるりと待機。

  8. おと より:

    https://blog.fc2.com/
    が、データーが取得できませんでした。表示されます。

    実装希望ですが、NGワードの削除の様に、
    指定キーワードの文字列置換え機能がほしいです。

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事