Casual Developers Note

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

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

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

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

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経由で送受信する方法
  • Jupyter Notebookで「The kernel appears to have died. It will restart automatically.」というエラーが出た場合の原因と対処法
    Jupyter Notebookで「The kernel appears to have died. It will restart automatically.」というエラーが出た場合の原因と対処法
  • Expressで「Cannot set headers after they are sent to the client」と怒られた時の対処法
    Expressで「Cannot set headers after they are sent to the client」と怒られた時の対処法
  • Amazon EC2インスタンスにSSHできなくなった時の対処法
    Amazon EC2インスタンスにSSHできなくなった時の対処法
  • [tips][perl] Perlで文字コードをいい感じに処理する方法
    [tips][perl] Perlで文字コードをいい感じに処理する方法
  • SLF4JとLogbackによるJavaのロギング入門(SLF4J + Logback + Lombok)
    SLF4JとLogbackによるJavaのロギング入門(SLF4J + Logback + Lombok)
  • AWS ECRとECSの入門(EC2編) ~ ECSのEC2版を使ってReactのDockerアプリケーションをAWS上で稼働させる方法 ~
    AWS ECRとECSの入門(EC2編) ~ ECSのEC2版を使ってReactのDockerアプリケーションをAWS上で稼働させる方法 ~
  • PythonでWebスクレイピング入門(Scrapy+Selenium編)
    PythonでWebスクレイピング入門(Scrapy+Selenium編)
  • [tips][Sublime Text] Sublime Text 3で文字化けしない方法
    [tips][Sublime Text] Sublime Text 3で文字化けしない方法

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