世界を旅して人生を楽しもう。コメントを書く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スクレイピングをするためのライブラリです。Soupが知られています。Scrapyで作ったクローラーはScrapingHubというクラウド上にデプロイすることができ、自前でサーバーを準備することなくすぐに可動させられます。XPathとは?XPathとは、XML文章から任意の位置を指定するための構文です。Webスクレイピングのライブラリでは通常XPathが利用可能であるため、この構文を利用することでXML形式の文章であるHTMLを解析することができます。難しい構文でも無いため、書いていればすぐに理解できるでしょう。以下を事前に準備しましょう。Python3がインストールされていることChromeがインストールされていることChromeのドライバーがインストールされていること今回はブラウザにChromeを使用し、Seleniumで操作するのでChromeのドライバーも必要です。Macの場合、ChromeのドライバーはHomebrewでインストールできます。(45a059dc425e08165f9a10324bd1380cc13ca363)開発環境の準備まずは、Scrapyのプロジェクトを準備しましょう。exitSpiderはScrapyのメインのスクリプトであり、Webサイトと紐づけて作られています。Newsweekのサイトから200が返ってきているので、正しくSpiderが作られていることが確認できました。今回はクローラーっぽくUSER_AGENTとDOWNLOAD_DELAYを設定します。これによりブラウザっぽくアクセスできます。ROBOTSTXT_OBEYを無効にすることで、robots.txtへのアクセスしなくなり、無意味なリクエストを減らせます。COOKIES_ENABLEDを無効にすることでクッキーにクローラー対策を施してあるサイトに対処しています。False...その他にも、この設定ファイルはItemやPipelineを使う場合に設定を追加して利用します。クローラーの作成それではメインのコーディングをしましょう。今回はNewsweekの記事のタイトルと記事内容を取得してみましょう。今回は適当に記事の対象となるサイトを選んだのですが、運悪くNewsweekはクローラー対策が施されているサイトでした。そのため、クローラーだと判断されてしまった場合にもう一度検索することで対処しています。クローラー対策が施されていないサイトの場合は、Scrapyだけでもすべてのデータを取得することが可能です。一応ですが、本来なら利用規約などを読んでWebスクレイピングが禁止されていないかを確認すべきですよ。動作確認それでは実行してみましょう。CSVファイルに3ページ分のタイトルと記事内容のHTMLが出力されました。最後にいかがでしたか?これでPythonでWebスクレイピングができるようになったと思います。Seleniumの知識も使えるのでE2Eテストをやっている人には取っ付き易いかもしれません。データを効率的に収集して、機械学習などに利用していきましょう。AuthorKD世界を旅し日本を愛するエンジニア。大学でコンピュータサイエンスの楽しさを学び、日本の大手IT企業で働く中で、新しい技術やスケールするビジネスが北米にある事に気づく。世界に挑戦するための最大の壁が英語であったため、フィリピン留学およびカナダ留学を経て英語を上達させた。現在は日本在住でエンジニアとして働きつつ、次の挑戦に備えて世界の動向を注視している。このブログでは、エンジニアやデザイナー向けの技術情報から、海外に留学したい人向けの留学情報、海外に興味がある人向けの海外旅行情報など、有益な情報を提供しています。0.0010このブログの運営のためにBitcoinでの寄付を募集しています。お気持ち程度の寄付を頂けると管理者の励みになります。