Casual Developers Note

エンジニアやデザイナー向けの技術情報・英語学習情報・海外留学情報・海外旅行情報を提供中。世界を旅して人生を楽しもう。

  • ホーム
  • 技術 Tips & Tutorials
  • 技術塾
  • ライフハック
  • 海外留学
  • 英語学習
  • コラム
  • お問い合わせ
現在の場所:ホーム / アーカイブpython

2018年6月29日 By KD コメントを書く

PythonでWebスクレイピング入門(Scrapy+Selenium編)

PythonでWebスクレイピング入門(Scrapy+Selenium編)

機械学習が流行している近年において、データを集める手段としてのWebスクレイピングもまた注目を集めています。現在はWebスクレイピングのための便利なライブラリが揃っているので、実装は簡単です。今回はPythonのScrapyとSeleniumを使って、Webスクレイピングする手法を紹介します。

はじめに

WebクローリングはWebサイトからHTMLなどのソースコードを収集するプロセスのことであり、Webスクレイピングは収集したデータから必要な情報を抽出するプロセスのことです。この記事ではまとめてWebスクレイピングと表現します。Webスクレイピングを利用することでさまざまな使いみちに応用できますが、近年では機械学習のためのデータ収集の手段として使われています。

今回は、PythonのWebスクレイピングのライブラリであるScrapyとSeleniumを組み合わせて、Newsweekのサイトをスクレイピングしてみましょう。

Scrapyとは?

Scrapyとは、PythonでWebスクレイピングをするためのライブラリです。類似したライブラリにBeautiful Soupが知られています。Scrapyで作ったクローラーはScrapingHubというクラウド上にデプロイすることができ、自前でサーバーを準備することなくすぐに可動させられます。

XPathとは?

XPathとは、XML文章から任意の位置を指定するための構文です。Webスクレイピングのライブラリでは通常XPathが利用可能であるため、この構文を利用することでXML形式の文章であるHTMLを解析することができます。特に難しい構文でも無いため、書いていればすぐに理解できるでしょう。

Newsweekのサイトをスクレイピング

前提条件

以下を事前に準備しましょう。

  • Python3がインストールされていること
  • Chromeがインストールされていること
  • Chromeのドライバーがインストールされていること

今回はブラウザにChromeを使用し、Seleniumで操作するのでChromeのドライバーも必要です。Macの場合、ChromeのドライバーはHomebrewでインストールできます。

$ brew cask install chromedriver
$ chromedriver --version
ChromeDriver 2.40.565386 (45a059dc425e08165f9a10324bd1380cc13ca363)

開発環境の準備

まずは、Scrapyのプロジェクトを準備しましょう。

$ python -m venv newsweek_crawler_env
$ source newsweek_crawler_env/bin/activate
$ pip install --upgrade pip
$ pip install ipython scrapy selenium
$ scrapy version
Scrapy 1.5.0
$ scrapy startproject newsweek_crawler
$ cd newsweek_crawler/
$ scrapy genspider newsweek www.newsweek.com
$ scrapy list
newsweek
$ scrapy crawl newsweek
...
2018-06-26 00:02:02 [scrapy.core.engine] DEBUG: Crawled (200)  (referer: None)
...
$ scrapy shell http://www.newsweek.com/
...
In [1]: response
Out[1]: <200 http://www.newsweek.com/>
In [2]: exit

SpiderはScrapyのメインのスクリプトであり、Webサイトと紐づけて作られています。Newsweekのサイトから200が返ってきているので、正しくSpiderが作られていることが確認できました。

Scrapyの設定

今回はクローラーっぽくUSER_AGENTとDOWNLOAD_DELAYを設定します。これによりブラウザっぽくアクセスできます。ROBOTSTXT_OBEYを無効にすることで、robots.txtへのアクセスしなくなり、無意味なリクエストを減らせます。COOKIES_ENABLEDを無効にすることでクッキーにクローラー対策を施してあるサイトに対処しています。

$ vi newsweek_crawler/settings.py
...
USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36'
ROBOTSTXT_OBEY = False
DOWNLOAD_DELAY = 2
RANDOMIZE_DOWNLOAD_DELAY = True
COOKIES_ENABLED = False
...

その他にも、この設定ファイルはItemやPipelineを使う場合に設定を追加して利用します。

クローラーの作成

それではメインのコーディングをしましょう。今回はNewsweekの記事のタイトルと記事内容を取得してみましょう。

今回は適当に記事の対象となるサイトを選んだのですが、運悪くNewsweekはクローラー対策が施されているサイトでした。そのため、クローラーだと判断されてしまった場合にもう一度検索することで対処しています。

クローラー対策が施されていないサイトの場合は、Scrapyだけでもすべてのデータを取得することが可能です。一応ですが、本来なら利用規約などを読んでWebスクレイピングが禁止されていないかを確認すべきですよ。

動作確認

それでは実行してみましょう。

CSVファイルに3ページ分のタイトルと記事内容のHTMLが出力されました。

最後に

いかがでしたか?これでPythonでWebスクレイピングができるようになったと思います。Seleniumの知識も使えるのでE2Eテストをやっている人には取っ付き易いかもしれません。データを効率的に収集して、機械学習などに利用していきましょう。では。

環境

  • Python : 3.6.5
  • pip : 10.0.1
  • Chrome : 67.0.3396.87
  • ChromeDriver : 2.40.565386
  • Scrapy : 1.5.0
  • Selenium : 3.13.0

カテゴリ : 技術 Tips & Tutorials タグ : python, scrapy, selenium

2018年2月12日 By KD コメントを書く

Slackにチャットするだけで為替レートを教えてくれるChatbotをPythonで作ろう

Slackにチャットするだけで為替レートを教えてくれるChatbotをPythonで作ろう

流行りのChatbotはいろいろな可能性を秘めています。流行っているのにはわけがあるのです。今回はSlackというチャットサービス上で、チャットするだけでボットが為替レートを教えてくれるChatbotをPythonで作ってみましょう。

はじめに

以下の以前の記事でChatfuelというサービスを使ったChatbotの作成方法について紹介しました。

ChatfuelでFacebookメッセンジャーを使うChatbot簡単入門

これはサービスなのでコーディング無しで簡単にChatbotが作れたわけですが、エンジニアからすると物足りないですよね。ということで、今回はPythonで実際にコーディングしながら、Slackにチャットするだけで為替レートを教えてくれるChatbotを作ってみましょう。

また、Pythonはインストールされている前提で進めます。インストール方法を知りたい人はこちらの記事を参考にして下さい。

Slackに登録する

Slackは仕事でよく使われるチャットサービスです。HipChatなどと比べると後発組になるので、デザインがオシャレで使いやすいです。デスクトップアプリはElectronで作られているのは以前の記事でお伝えしましたね。

それでは、Slackに登録していきましょう。Slackのサイトに行き、「Slackを始める」から「ワークスペースを新規作成」を選択します。ワークスペース名はチームで共有するチャットルームの名前ですが、今回はあなたとChatbotの会話になるので、好きな名前をつければ良いと思います。

スクリーンショット 2018 02 08 1 17 34

後は自分の名前とメールアドレスを登録すれば完了です。チームでの活動を前提とした作りなので他の人を招待するように促されますが、招待はしてもしなくても構いません。

SlackにBotsを登録する

次に、ワークスペースにログインし、「アプリを検索する」をクリックしましょう。

スクリーンショット 2018 02 08 1 28 17

アプリ一覧の検索画面が表示されるので、「bots」と入力して下さい。一番上に出てきたのが今回使う「Bots」というアプリです。「インストール」をクリックしましょう。

スクリーンショット 2018 02 08 1 30 42

続いて「設定を追加」をクリックします。

スクリーンショット 2018 02 08 1 31 01

「ユーザ名」はワークスペースに表示されるChatbot自体の名前になりますので、自由に決めてください。ユーザ名の入力が終わったら「ボットインテグレーションを追加する」をクリックします。

スクリーンショット 2018 02 08 1 31 32

SlackとBotsとのインテグレーションが完了すると、APIトークンが払い出されますので、メモしましょう。後で使います。

スクリーンショット 2018 02 08 1 31 47

これでSlack側の設定は完了です。

slackbotのインストール

今回はSlackのChatbotを実装するためにslackbotを使用します。

それでは、Pythonで仮想環境を作って、インストールしていきましょう。

これでインストールは完了です。

初期設定をする

インストールが終わったので、初期設定をしましょう。

フォルダとファイルを作る

まずは、今回必要なフォルダとファイルを作成します。

設定ファイルを書く

「slackbot_settings」を書きましょう。

このファイルは、プロパティ値を書くためのファイルです。「API_TOKEN」に先程SlackのBotsの「インテグレーションの設定」で確認した「APIトークン」を記載して下さい。「DEFAULT_REPLY」はチャット上でメッセージを受け取った際に取るべきアクションがない場合に返却されるメッセージです。例えばSiriで言うところの「すみません、よくわかりません。」というメッセージのことです。「PLUGINS」は特定のフォルダを指定することで、そのフォルダ内のファイルを自動的に読み込んでくれる設定です。

「run.py」を書きましょう。

このファイルは、slackbotを実行するためのスクリプトです。

為替レートの取得とメッセージを実装する

それでは、メインのコーディングに入ります。

為替レートを取得するAPIですが、当初は以前使っていたYQLからYahoo!ファイナンスのデータを取得しようと思ったのですが、これは現在は動いていないです。なので、代わりに、FloatRatesのAPIを使います。データの取得は一日2回と書いてあるので、取得頻度が多い場合は向きませんが、今回は今日の為替レートが分かれば良いので、これを使います。

Pythonでコーディング

「exchange_rate_bot」の中身をコーディングしましょう。

ちゃちゃっとコーディングするとこうなります。

完成です。

円とアメリカ・ドルのレートと円とカナダ・ドルのレートを取得しています。「@respond_to」にチャットで聞く際のメッセージ(今回は「rates」)を記載し、「message.reply」で返答となるメッセージを設定しています。

Slackでチャットして動作確認する

最後に動作確認をしていましょう。

まずは、run.pyを実行してslackbotを起動します。

すると、ワークスペースでmybotの起動を確認できます。

スクリーンショット 2018 02 08 16 15 55

それでは、mybotにチャットしてみましょう。mybotとのチャットページで「rates」と入力すると、今日の為替レートが返却されます。

スクリーンショット 2018 02 08 16 24 58

前から思っていましたが、カナダ・ドルのレートを見ると円高なんじゃないかと錯覚しますよね(笑)アメリカ・ドルと比べてお得感があるというか。

それはさておき、便利なボットなので、チームのみんなにも紹介してあげましょう。ということで、mybotを「#general」に招待します。

スクリーンショット 2018 02 08 16 24 15

すると、「#general」で誰でもmybotに為替レートを聞くことができます。

スクリーンショット 2018 02 08 16 25 15

返却される為替レートの結果は同じになりました。これは、最初に記載した通り、このAPIは一日2回のデータ更新なので、続けて実行しても結果は同じです。

それにしても律儀に毎回教えてくれるなんて、親切なボットができましたね。

最後に

いかがでしたか?Slackを使って為替レートを教えてくれるChatbotは楽しんでいただけましたか?天気予報やニュースと言った便利な情報を取得して教えてくれるボットや、ChatOpsなどのような何かアクションを代わりに実行してくれるようなボットなど、応用する範囲はいろいろあるので、試してみると面白いでしょう。それでは。

環境

  • PC : macOS High Sierra 10.13.3
  • python : 3.6.0
  • pip : 9.0.1
  • slackbot : 0.5.1

カテゴリ : 技術 Tips & Tutorials タグ : chatbot, exchange-rates, python, slack

2018年1月3日 By KD コメントを書く

データサイエンスのためのAnaconda環境構築とJupyter Notebook入門

データサイエンスのためのAnaconda環境構築とJupyter Notebook入門

少し前からディープラーニングやAIなどのデータサイエンスが流行っています。一説によると海外の企業は優秀なデータサイエンティストを探していて、データサイエンティストの収入は最低でも1000万円は超えるらしいですね。これは海外で働いているシニアエンジニアと同じくらいの給料で、高騰していると言えます。理由は簡単で人が足りないからです。貴重なものには価値がつく。それだけです。今回はデータサイエンスを始めるための準備作業であるAnacondaとJupyter Notebookの使い方を紹介します。

Anacondaとは?

Anacondaとは、プログラミングに慣れていないデータサイエンスのためのPython開発環境です。簡単に言うとデータサイエンス向けの仮想環境やパッケージのインストールが簡単にできるよ、というものです。GUIとCUIの両方で提供されています。パッケージ内にはCondaというpipに代わるパッケージ管理ツールと、Jupyter Notebookが標準で入っています。Condaはパッケージをビルド済の状態でインストールできるので、各々の環境差分によるビルド失敗を防げます。個人的にはpipより優れていると思いますので、ついでに使ってみると良いと思いますよ。

https://anaconda.org/

Jupyter Notebookとは?

Jupyter Notebookは、データ分析などの作業をする時に、ソースコードを書いて実行結果を記録しながらノートブック形式でまとめるためのツールです。

http://jupyter.org/

Anacondaの環境構築

今回はインストーラをダウンロードしてきてインストールする方法はとりません。それは不便だからです。コーディング以外の作業はコマンドラインで完結すべきです。もしどうしてもインストーラが必要な方は上のAnacondaのサイトからダウンロードできます。

pyenvのインストール

pyenvとは、Pythonのバージョンを管理するためのツールです。Python2.7とPython3.5を切り替えて使うことができます。今回の場合はさらにanacondaを切り替えて使います。

pyenvのインストールに関しては以前に書いた「MacでRubyとPythonとJavaとNodeとPerlの複数バージョンを管理する方法」の記事を参考にしてください。

余談ですが、python以外の言語も同様の方法で管理したい人はanyenvを試してみると良いでしょう。

Anacondaのインストール

Pyenvからanacondaのバージョンを探してインストールします。コマンドラインから簡単にできます。

もしanaconda以外のPythonをあまり使わない場合は、pyenv globalを使用して下さい。

また、MinicondaというAnacondaから機能を削ぎ落としたバージョンもありますので、気になる方は調べてみて下さい。ただし、pyenvでインストールすると一部のコマンドが競合する可能性があるのでパスに気をつけてください。

https://conda.io/miniconda.html

Jupyter Notebookの使い方

起動と停止

Anacondaに入っているJupyter Notebookのバージョンを確認しましょう。

大丈夫そうですね。では、さっそく起動してみましょう。

では「http://localhost:8888/tree」にアクセスしてみましょう。

スクリーンショット 2017 12 31 16 32 18

停止する時は普通にControl+Cでできます。

新しいノートブックを作ってみる

では新しノートブックを作ってみましょう。

Jupyter Notebookを起動したところから始めます。それでは「New -> Python3」をクリックして下さい。

スクリーンショット 2017 12 31 20 12 37

これでPython3のノートブックが作成されました。以下のようにコードを入力して、実行ボタンを押すと、以下のように実行結果が表示されます。

スクリーンショット 2017 12 31 20 16 20

メニューの「Code」のプルダウンからMarkdownに変更することもできます。

スクリーンショット 2017 12 31 20 16 39

こうすると普通にMarkdownで書けます。

スクリーンショット 2017 12 31 20 34 27

スクリーンショット 2017 12 31 20 33 33

こんな感じです。ソースコードの実行結果とMarkdownでデータ分析した内容を整理できることが分かります。

あと、ちゃんとファイルには名前をつけて分かるようにしましょう。
「File -> Rename」でできます。

スクリーンショット 2017 12 31 20 20 14

よくあるインターフェースなので分かりやすいです。

スクリーンショット 2017 12 31 20 20 29

作業が終了したら保存します。左端のアイコンからできます。

スクリーンショット 2017 12 31 20 18 30

そして終了します。
「File -> Close and Halt」です。

スクリーンショット 2017 12 31 20 22 06

終了すると、最初の一覧に戻ります。ここで作成したファイルを一覧で管理できます。ノートブック形式で保存されていることが分かりますね。

スクリーンショット 2017 12 31 20 20 46

作ったノートブックを出力する

作ったノートブックのページから「File -> Download as」から好きな形式でダウンロードできます。

出力できる形式

  • Notebook
  • Python
  • HTML
  • reST
  • PDF

スクリーンショット 2017 12 31 20 47 48

便利ですね。ほしいフォーマットはだいたいあります。

作ったノートブックをシェアする

作ったノートブックはnbviewerを通して世界にシェアできます。試してみて下さい。

https://nbviewer.jupyter.org/

最後に

いかがでしたか?初歩的な内容ではありますが、データサイエンスを始める上では役に立ったのではないでしょうか。今後TonsorFlowなどの流行りのディープラーニングライブラリを使う場合なども今回の環境からスタートできます。では。

環境

  • OS : macOS High Sierra 10.13.2
  • Anaconda : 4.3.0
  • Python : 3.6.0
  • Jupyter : 4.2.1
  • Jupyter Notebook : 4.3.1

カテゴリ : 技術 Tips & Tutorials タグ : anaconda, jupyter, python

  • « 前のページ
  • 1
  • 2

ブログ更新情報や海外の関連情報などを配信する無料メルマガ

Sponsored Links

About Author

KD

世界を旅し日本を愛するエンジニア。大学でコンピュータサイエンスの楽しさを学び、日本の大手IT企業で働く中で、新しい技術やスケールするビジネスが北米にある事に気づく。世界に挑戦するための最大の壁が英語であったため、フィリピン留学およびカナダ留学を経て英語を上達させた。現在は日本在住でエンジニアとして働きつつ、次の挑戦に備えて世界の動向を注視している。挑戦に終わりはない。このブログでは、エンジニアやデザイナー向けの技術情報から、海外に留学したい人向けの留学情報、海外に興味がある人向けの海外旅行情報など、有益な情報を提供しています。

https://casualdevelopers.com/

最近の投稿

  • 2020年JS周辺のバックエンド寄りの注目技術!ネクストNodeJSの「Deno」と分散型パッケージレジストリの「Entropic」の紹介

    2020年JS周辺のバックエンド寄りの注目技術!ネクストNodeJSの「Deno」と分散型パッケージレジストリの「Entropic」の紹介

    2020年1月13日
  • 今さら聞けないJavaによる関数型プログラミング入門 ~ラムダ式、ストリーム、関数型インターフェース~

    今さら聞けないJavaによる関数型プログラミング入門 ~ラムダ式、ストリーム、関数型インターフェース~

    2019年11月4日
  • ReactのためのEslintおよびPrettierの設定方法 ~Airbnb JavaScript Style Guideの適用~

    ReactのためのEslintおよびPrettierの設定方法 ~Airbnb JavaScript Style Guideの適用~

    2019年10月30日
  • BashからZshに移行する方法(Mac編)

    BashからZshに移行する方法(Mac編)

    2019年10月21日
  • Create React Appを使わないでゼロからReactの開発環境を構築する方法(Webpack/Docker編)

    Create React Appを使わないでゼロからReactの開発環境を構築する方法(Webpack/Docker編)

    2019年9月30日

カテゴリ

  • 技術 Tips & Tutorials (100)
  • 技術塾 (6)
  • ライフハック (26)
  • 海外留学 (12)
  • 英語学習 (3)
  • コラム (6)

アーカイブ

最高の学習のために

人気記事ランキング

  • MySQLで「ERROR 2003 (HY000): Can't connect to MySQL server」と怒られた時の対処法
    MySQLで「ERROR 2003 (HY000): Can't connect to MySQL server」と怒られた時の対処法
  • SAKURAのメールボックスで独自ドメインのメールを設定し、Gmail経由で送受信する方法
    SAKURAのメールボックスで独自ドメインのメールを設定し、Gmail経由で送受信する方法
  • Expressで「Cannot set headers after they are sent to the client」と怒られた時の対処法
    Expressで「Cannot set headers after they are sent to the client」と怒られた時の対処法
  • AWS ECRとECSの入門(EC2編) ~ ECSのEC2版を使ってReactのDockerアプリケーションをAWS上で稼働させる方法 ~
    AWS ECRとECSの入門(EC2編) ~ ECSのEC2版を使ってReactのDockerアプリケーションをAWS上で稼働させる方法 ~
  • 爆速でJenkinsをマスターしよう(GitHubアカウント統合編) ~ JenkinsのGitHub Organizationの設定方法 ~
    爆速でJenkinsをマスターしよう(GitHubアカウント統合編) ~ JenkinsのGitHub Organizationの設定方法 ~
  • Amazon EC2インスタンスにSSHできなくなった時の対処法
    Amazon EC2インスタンスにSSHできなくなった時の対処法
  • バンクーバー留学豆知識:バンクーバーのATMで日本の銀行のキャッシュカードを使ってお得にお金を引き出す方法
    バンクーバー留学豆知識:バンクーバーのATMで日本の銀行のキャッシュカードを使ってお得にお金を引き出す方法
  • Jupyter Notebookで「The kernel appears to have died. It will restart automatically.」というエラーが出た場合の原因と対処法
    Jupyter Notebookで「The kernel appears to have died. It will restart automatically.」というエラーが出た場合の原因と対処法
  • [tips][bat] バッチで明日の日付を計算する。
    [tips][bat] バッチで明日の日付を計算する。
  • [tips][perl] Perlで文字コードをいい感じに処理する方法
    [tips][perl] Perlで文字コードをいい感じに処理する方法

Bitcoin寄付 / BTC Donation

Bitcoinを寄付しよう

BTC
Select Payment Method
Personal Info

Donation Total: BTC 0.0010

このブログの運営のためにBitcoinでの寄付を募集しています。お気持ち程度の寄付を頂けると管理者の励みになります。

Bitcoin寄付について知りたい方はこちらの記事へ

ビットコイン取引ならここ

  • ホーム
  • 技術 Tips & Tutorials
  • 技術塾
  • ライフハック
  • 海外留学
  • 英語学習
  • コラム
  • サイトマップ
  • タグ一覧
  • プライバシーポリシー
  • お問い合わせ

Copyright © 2023 KD - Casual Developers Notes