Semaltのチュートリアル:PythonでのWebスクレイピング

私は最近、KinoPoisk(IMDBのロシア語版)にアクセスしましたが、何年にもわたって1000本を超える映画を評価できたことがわかりました。これらのデータをより詳細に調査することは興味深いと思いました。私の映画の好みは時間とともに変化しましたか?年のどの季節にもっと映画を観ますか?

しかし、美しいグラフィックを分析して構築する前に、データを取得する必要があります。残念ながら、多くのサービスにはパブリックAPIがないため、袖をまくってHTMLページを解析する必要があります。

この記事は、Web Scrappingの使用方法を常に学びたいと思っていたが、それを手に入れなかった、またはどこから始めればよいかわからなかった人を対象としています。

仕事

私たちのタスクは、すでに見た映画に関するデータを抽出することです:映画のタイトル、視聴した日時、ユーザーの評価。

実際、私たちの作業は2つの段階で行われます。

ステージ1:HTMLページをダウンロードして保存する

ステージ2:詳細な分析に適した形式(csv、json、pandasデータフレームなど)でhtmlを解析します

楽器

http-requestsを送信するための多くのpython-librariesがあります。最も有名で非常に便利なのはリクエストです。

また、html解析用のライブラリを選択する必要があります。

BeatifulSoup、lxml

これらはhtmlを解析するための最も人気のある2つのライブラリであり、それらの1つを選択することは個人的な好みにすぎません。さらに、これらのライブラリは互いに密接に関連しています。BeautifulSoupはlxmlをアクセラレーションの内部パーサーとして使用し始め、lxmlにはsoupparserモジュールが追加されました。アプローチを比較するために、BeautifulSoupでデータを解析し、lxml.htmlモジュールでXPathセレクターを使用します。

データのダウンロード

データのダウンロードを始めましょう。まず、ページをURLで取得してローカルファイルに保存してみましょう。

結果のファイルを開くと、それほど単純ではないことがわかります。サイトは私たちをロボットと見なし、データを表示しません。

サイトのしくみを調べましょう

ブラウザは、サイトから情報を取得することに問題はありません。リクエストが正確に送信される方法を見てみましょう。これを行うには、ブラウザーの「開発者ツール」の「ネットワーク」パネルを使用します(このためにFirebugを使用しています)。通常、必要な要求は最も長いものです。

ご覧のように、ブラウザはヘッダーにUserAgent、Cookie、およびその他の数のパラメータも送信します。最初に、正しいUserAgentをヘッダーに送信しようとします。

今回は成功し、必要なデータが得られました。時にはサイトがCookieの有効性もチェックすることに注意してください。その場合、リクエストライブラリのセッションが役立ちます。

すべての料金をダウンロード

これで、レート付きの1ページを保存できます。しかし、通常、ユーザーには多くのレートがあり、すべてのページを反復処理する必要があります。興味のあるページ番号を直接URLに転送するのは簡単です。

HTMLからのデータの収集

次に、htmlから直接データを収集します。 HTMLページがどのように構成されているかを理解する最も簡単な方法は、ブラウザーで「要素の検査」機能を使用することです。この場合、すべてが非常に単純です。レートを含むテーブル全体がタグ内にあります。このノードを選択:

bs4からのインポートBeautifulSoup

lxmlインポートhtmlから

#美しいスープ

soup = BeautifulSoup(テキスト)

film_list = soup.find( 'div'、( 'class': 'profileFilmsList'))

#lxml

ツリー= html.fromstring(テキスト)

film_list_lxml = tree.xpath( '// div [@class =' 'profileFilmList' ']')[0]

映画のロシア語のタイトルを引き出す方法と映画のページへのリンクを学習する方法を学びましょう(テキストと属性の値を取得する方法も)。

英語でタイトルを抽出する必要がある場合は、「nameRus」を「nameEng」に変更してください。

結果

Webサイトを解析する方法を学び、Requests、BeautifulSoup、およびlxmlの各ライブラリーに精通し、KinoPoiskですでに見た映画をさらに分析するのに適したデータを受け取りました。