【Pythonスクレイピング入門】bs4(BeautifulSoup)をインストール



事前準備

requestsでヤフーのトップページにGETリクエストを送ってレスポンスを取得。res変数にhttpレスポンス格納済みです。

更に目標とするセレクタをChromeのデベロッパツールを使ってクリップボードにコピーし取得しました。

ここまでですね。

今回やること

今回は取得したセレクタを実際にプログラム上で使用して、必要な情報を抜き出すという作業です。

必要なもの

  • bs4(BeautifulSoup)
  • lxml

Anacondaでパッケージを管理していれば基本的にどちらも初期状態から入っています。

必要なHTMLを抜き出すためにbs4というモジュールを使います。Python用のHTMLパーサもいくつか存在しますが、bs4とlxmlの組み合わせは割とメジャーなのでこれらを使っていきます。

ない場合はどちらもpipでインストール可能です。適宜インストールしてください。

ターゲットを抜き出す

一行目はbs4というモジュールのBeautifulSoupというパーツをインポートして、これ以降 bs4 って書いたらそれを使うってことだからね。という宣言です。as bs4 は別になくても動くんですが、その場合一々BeautifulSoupって書くことになります。

なげーよ。ってことで、bs4と書けば使えるようにしてます。

次は soup という変数に先ほど宣言したbs4を呼び出して、res.contentを渡しています。カンマで区切った後の'lxml'はパーサという解析の方式を指示するのですが、別にこれもなくても動きます。省略可能ですが、lxmlは中身がCで書かれているらしく、標準のhtml.parserより早いってことでこちらを使ってます。

最後の行はsoupオブジェクトのselectメソッドに前回デベロッパツールを使って確保したCSSセレクタを渡しています。

この3行でヤフートップからトピックス抜き出し完了・・・するはずでした。

ふぁ?

Out の中身カラやんけ。( ゚Д゚)

何故か抜き出せていません。

で、全体をさらっと見てみると・・・?

なんか変な文言出てますね。

BOT判定で蹴られてます。
BOT判定というか、直訳すると「ブラウザの情報おかしいから、ちゃんとアップデートしてからアクセスしろよ」的なことをヤフーさんがおっしゃっています。

つまり普段ブラウザからアクセスしてみるヤフーのトップページと、requestsでアクセスして表示されたページ(実際には表示はされてはいないけど)のHTMLが違ったという状態です。

ふぅ、お手上げだぜ・・・。

まとめ

取りたいタグも取れないこんな世の中じゃ~poison

次回、この状況を解決します。

次の記事