Casual Developers Notes

初級・中級のエンジニアやデザイナー向けに技術情報と英語学習情報を提供中。エンジニアもデザイナーも技術と英語を身に着けて海外に飛び立とう!

  • ホーム
  • 技術 Tips & Tutorials
  • 技術塾
  • ライフハック
  • 海外留学
  • 英語学習
  • コラム
  • お問い合わせ
You are here: Home / Archives for selenium

2018年6月29日 By Keid Leave a Comment

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

技術力と英語力を向上させて
あたなを次のステージへ引き上げるための無料メルマガ

Sponsored Links

About Author

Keid

カナダを拠点に活躍する(予定)デベロッパー。 大学でコンピュータサイエンスを真面目に学び、日本の大手IT企業に就職したまでは予定通りの人生だったが、日本のIT業界に失望したことで考え方が変わり、海外への挑戦を決意。海外に行きたくても英語ができなかっため、語学留学を経て強制的に英語を上達させ、カナダへの切符を手にした。このブログでは海外に挑戦したいエンジニアやデザイナーに少しでも有益な情報を提供していきたいと思う。(写真は旅行で行ったラスベガス)

https://casualdevelopers.com/

最近の投稿

  • 自作のNPMモジュールをsemantic-releaseを使って自動的にセマンティック・バージョニングで管理する方法

    自作のNPMモジュールをsemantic-releaseを使って自動的にセマンティック・バージョニングで管理する方法

    2019年2月15日
  • Go言語でさくっとREST APIを作ろう(Gorilla Mux編)

    Go言語でさくっとREST APIを作ろう(Gorilla Mux編)

    2019年2月4日
  • MacBook ProでApp Storeのアプリをアップデートする際に「This item is temporarily unavailable」と怒られた場合の対処法

    MacBook ProでApp Storeのアプリをアップデートする際に「This item is temporarily unavailable」と怒られた場合の対処法

    2019年2月1日
  • Go言語のためのVisual Studio Codeの設定方法

    Go言語のためのVisual Studio Codeの設定方法

    2019年1月28日
  • reCAPTCHAをWordPressに導入してロボットによるスパムメールを防ぐ方法

    reCAPTCHAをWordPressに導入してロボットによるスパムメールを防ぐ方法

    2019年1月25日

カテゴリ

  • 技術 Tips & Tutorials (85)
  • 技術塾 (5)
  • ライフハック (25)
  • 海外留学 (11)
  • 英語学習 (3)
  • コラム (7)

アーカイブ

最高の学習のために

人気記事ランキング

  • MySQLで「ERROR 2003 (HY000): Can't connect to MySQL server」と怒られた時の対処法
    MySQLで「ERROR 2003 (HY000): Can't connect to MySQL server」と怒られた時の対処法
  • [tips][Sublime Text] Sublime Text 3で文字化けしない方法
    [tips][Sublime Text] Sublime Text 3で文字化けしない方法
  • [tips][bat] バッチで明日の日付を計算する。
    [tips][bat] バッチで明日の日付を計算する。
  • 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][perl] Perlで文字コードをいい感じに処理する方法
    [tips][perl] Perlで文字コードをいい感じに処理する方法
  • データサイエンスのためのAnaconda環境構築とTensorflowのインストール方法(Docker編)
    データサイエンスのためのAnaconda環境構築とTensorflowのインストール方法(Docker編)
  • SpringBootのProfile毎にプロパティを使い分ける3つの方法
    SpringBootのProfile毎にプロパティを使い分ける3つの方法
  • SAKURAのメールボックスで独自ドメインのメールを設定し、Gmail経由で送受信する方法
    SAKURAのメールボックスで独自ドメインのメールを設定し、Gmail経由で送受信する方法
  • PythonでWebスクレイピング入門(Scrapy+Selenium編)
    PythonでWebスクレイピング入門(Scrapy+Selenium編)
  • Herokuの無料dynoをスリープさせないで24時間稼働させる4つの方法
    Herokuの無料dynoをスリープさせないで24時間稼働させる4つの方法

Bitcoin寄付

Bitcoinを寄付しよう

BTC
Select Payment Method
Personal Info

Donation Total: BTC 0.0010

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

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

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

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

Copyright © 2019 Keid - Casual Developers Notes