質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.52%

  • アルゴリズム

    408questions

    アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

  • マクロ

    226questions

    定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

  • サーブレット

    118questions

    サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

営業リスト作りを自動化したいです。

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 616

0ku_hir0

score 3

⚪︎実現したいこと
営業リスト作りを自動化するシステムを開発したいと考えています。
現在は企業の電話番号が載っているwebサイトを見て、企業名とその電話番号をエクセルに手入力してリスト作りをしています。
非常に手間なのでこの作業を自動化するシステムを作りたいです。

⚪︎前提
自分のプログラミング経験は
・HTMLで簡単なホームページを作った事がある。
・テックカンパニーでruby on railsを使ってwebサービスを作るという講義を受講しツイッターのクローンを作った事がある。

と言う状態です。プログラミング環境の構築はできています。
上記実現したいことを実現さするにあたって何から手を付けたらいいか全くわからないです。

・お聞きしたいこと
学ぶべき言語
学ぶべき領域、考え方
これを実現するにあたって参考になる書籍

です。
よろしくお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+2

大きな流れとしては

  1. データの取得ルールの構築
    人間が判断している基準をルール化(どういった検索ワードでサイトを検索し、サイトにたどり着き、どのリンクに連絡先が書いてありそうかの判定)
  2. ルールに沿ったデータの取得
  3. 取得したデータの加工(CSV化)

という流れになります。

2や3はyamatake0928さんの回答にあるような書籍だったり、「スクレイピング」で検索して出てくる情報で作成可能です。
メジャーな言語ならどの言語でも情報に困らない分野だと思います。

ここについては

  1. 学ぶべき領域 = HTMLの構造についての知識、スクレイピング
  2. 学ぶべき言語 = 入門者向け書籍でwebアプリケーションを扱ってる言語ならだいたい何でもOK

といったところでしょうか。

問題は1の方で、
不特定多数のサイトについて、精度高くルール化するというのは中々に困難です。
ちゃんと作られているサイトばかりではないので、「それっぽい」を判定出来ないといけないです。

こういった場合、学習データを十分に用意/調整出来るという前提であれば

  1. 学ぶべき領域 = ディープラーニング、機械学習やディープラーニング
  2. 学ぶべき言語 = 上記について情報が多い言語(個人的なイメージとしてはPythonが多いですが、メジャーな言語ならライブラリが存在すると思います)

といったアプローチでクリア出来そうです。

[以下、楽な方法]
上記は正直なところ、とても大変です。
webサイトからではなく、タウンページからデータを収集するような形なら2,3だけで済むので、
(既に各種ツールも存在しますが)タウンページ スクレイピング あたりで検索してチャレンジされるのもいいかなと思います。
もっと楽でタウンページよりは精度がいい方法としては、「名簿業者から買ってしまう」という方法も存在します。
(データの出所については気にしないといけませんが、法人名簿であれば合法的な方法で収集されているケースが多いです)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/15 22:56

    ご回答ありがとうございます。
    理想は複数サイトから精度の高いデータを抽出することです。難しいことなのですね。。一旦はルールに沿ったデータの取得、取得した情報の加工の部分でチャレンジしてみようと思います。本業は広告営業なのですが暇を見てルール構築の部分も勉強してみます。とても勉強になりました。ありがとうございます。

    キャンセル

  • 2017/10/15 22:59

    まあ汎用的な名前になるほど精度が低くなりますが。
    WEBをクローリングしてやると・・・

    etc 佐藤商店

    キャンセル

  • 2017/10/15 23:25

    いきなり全自動とはいかなくても
    asahina1979さんのコメントや
    miyabi-sunさんの回答の方向でご自身で定義出来るルールから始めて、
    ある程度はプログラムにやらせて、最初と最後をに手作業を挟むというのは現実的な労力かつ高い精度を保てそうに思います。

    キャンセル

+2

学ぶべき領域、考え方

やろうとしていることはスクレイピングです。
概要はRuby + Nokogiriでスクレイピング - Qiita等の記事を参照してください。

学ぶべき言語

Ruby、Python、Node.js、PHP辺りが無難でどれでも構いません。
得意な物を選んでください。
多少心得のあるRubyがオススメでしょう。

何故Rubyというかスクリプト言語を推すかの理由ですが、
Webサイトの元になるのはHTMLです。
HTMLってのは多少ルールが風変わりなだけで文字列です。

上記上げた世の中のスクリプト言語の有名所は大抵この文字列の変換が得意です。
作業によって言語により多少得意不得意はあるものの、
プログラムを構築する人の言語の得意不得意で簡単に覆る程度の差しかありません。


さて、実際に何をやるかに移りましょう。
ざっくりと考えますが、大まかに分けて以下の3章立てになるでしょう

  1. URLから企業名を抽出する
  2. URLから電話番号を抽出する
  3. どうやってエクセルに反映するか

まず、企業名ってどうやって抽出するかですが、
これは基本的にトップページのhead > title要素内に格納されている事が多いです。
teratailのトップページも<title>teratail【テラテイル】|思考するエンジニアのためのQAプラットフォーム</title>という文字列が見えますね。
多少のノイズは後でエディターを使って一気に修正すれば5分で終わるので、今回は我慢してください。

次にURLから電話番号を抽出する方法ですが、
HTMLファイル全体を正規表現で全文検索してください。
電話番号は0から始まる10~11桁の数字(最初の0は国内コード)ですが、ハイフンで区切られる事もあります。
/[0-9\-]{10,13}/という正規表現を使って抜き出せばまぁまぁいい感じに電話番号らしき数字列を抜き出せるのではないでしょうか?

最後に抜き出した情報とExcelとの連携ですが、
プログラミング言語でExcelファイルを読み書きするのは絶対に避けろと言われる程、困難かつまともに動かない負けフラグです。
そこで完全自動化ではないものの、Excelに反映しやすいTSVファイルを生成しましょう。

兄弟の様式にCSVファイルがあり、
こちらは非エンジニアの方もExcel連携に使われる様式なので聞き覚えがあるかもしれません。

Excelは次の行の入力にはEnter(改行)を利用しますが次の列の入力にはTabを利用します。
これはクリップボードからの貼付けでも同様で、
複数行のテキストを貼り付けた場合、複数行にまたがって上書きしながらデータを入力することが可能です。
この時に、1行の中にTabの文字列が含まれている場合、なんと次の列にデータを格納することが出来ます。

従って、タブと改行で区切ったデータをを用意すれば、
ファイルをテキストエディタで開く→Ctrl+Aで全選択→Excelを開いて右クリックコピーの3操作で完結するわけですね。


これを実現するにあたって参考になる書籍

1回答で書ける範囲の内容だったので特にありません。
やることがキマリきってるんで、ハマる度にググって解決すれば済む話です。

ただし、ここにたどり着くまでの基礎の部分というわけで、シス管系女子をオススメします。
これは営業志望の新人OL「みんとちゃん」が誤ってシステム管理部門に配属され、
先輩社員に教えてもらいながらエンジニア流のファイル操作や情報処理のテクニックを教えてもらうという漫画です。

可愛いらしい見た目とは裏腹に現役エンジニアでも初耳のコアなテクニックまで解説されており、
Unix(Linux)やターミナルってこんなに凄いんだ、便利なんだっていう事を感じ取ってもらい、
またWindowsで同じことを実現するにはどうすれば…と考えるネタにもなります。

他には書店のパソコン関係のエリアに、
エンジニアが普段からやっている仕事術みたいな書籍が多数あり、
常日頃やっている退屈な業務を効率的にこなすアイデアが紹介されているので、色々立ち読みしてはどうでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

ExcelVBAなんかどうでしょうか?
ExcelVBAでIEからWebデータを取得する手順を紹介している書籍も出ています。
http://amzn.to/2ynXoTg

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/15 22:37

    ご回答ありがとうございます!
    複数サイトから複数の情報の抽出が最終的な目標なので、tanatさんのご回答が目指すところにはなりそうです。ただ、ものすごく時間はかかりそうですので、まずはyamatake0928さんの回答通りVBAでリスト作りやってみます!!これだけでもだいぶ作業楽になりそうな気がします。ありがとうございます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • アルゴリズム

    408questions

    アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

  • マクロ

    226questions

    定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

  • サーブレット

    118questions

    サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。