仕事の自動化の場面で、該当サイトのページの下の階層にページが紐づいているとします。
その下層ページが1000ページあり、その1000ページに記載しているURLを取得しなければならないとします。
手作業でやったとしたら1つ5分。5000分ですよね。 83時間です。
プログラミングでやってしまえば、ソースコードさえできればエンターキーを押すだけです。
便利ですよね。
このようにWebスクレイピングを使う場合、大量のデータを取り扱う必要があり、複数単位のループ処理は必須となります。
動画では、エラーが起きた場合などの処理も含めました。
このレッスンで、Webスクレイピングを使った複数のデータを扱う際の基本処理をマスターしてください。
また、右上のカードがWebスクレイピングのレッスンはご覧いただけましたでしょうか?
前回のレッスンでは、seleniumによるブラウザの自動操作やBeautifulSoupによるデータの取得などを学習しました。
また、そのレッスンでは、キノコードのPython超入門コースの一覧ページにあるレッスン名とレッスンの解説ページのリンク先URLのデータ取得しました。
このレッスンでわからないことがあれば前回のレッスンに戻ってみてください。
キノコードでは、この動画で話した内容の文字書き起こし、ソースコードもキノコードのウェブサイト、キノブログでもアップしています。
そちらもぜひチェックしてみてください。
それではレッスンスタートです。
▼目次
00:00 ダイジェスト
00:57 はじめに
02:54 レッスンの説明
04:48 各ページへのリンクの取得
12:41 移動した下層ページのデータの取得
14:49 エラーの場合の例外処理
17:38 データフレームへの変換とCSV保存
19:35 おまけのNG集
▼関連動画
Pythonで面倒な「ブラウザ操作」や「データ収集」の作業を自動化しよう|Webスクレイピングのやり方をわかりやすく解説
Python超入門講座
Pandas超入門講座
▼文字書き起こし
それでは、ライブラリをインポートする記述をします。
bs4のパッケージの中にあるBeautifulSoupを読み込みます。
BeautifulSoupは、複雑なHTMLの構造を解析し、必要な部分を取り出すことができるWebスクレイピング用のライブラリです。
次に、requestsをインポートします。これはPythonを使ってHTTP接続するために必要なライブラリです。
前回のWebスクレピングのレッスンで紹介したPythonの標準のurllibモジュールよりもコード量が少なく記述することができ、シンプルに実装できるライブラリです。
次に、取得したデータをCSVに書き出すために、pandasをインポートします。
asを記述するとライブラリ名を好きな名前で使うことができます。
pandasについては、「Pandas入門講座」にて詳しくご紹介していますので、ご興味があればご覧ください。
また、HTTPに接続した後、すぐに次の処理が実行されないようにするためtimeをインポートします。
timeモジュールを使うことで、Webページのデータを取得する前に次の処理にいかないように、3秒間であったり5秒間、次の処理を待機させることができます。
それでは、実行します。
インポートが完了しました。
では、kinocodeのWebサイトの「Python超入門コース」のコース一覧にあるタイトルとリンク先のURLのデータを取得してみましょう。
また、そのタイトルとリンク先URLをセットにして、CSVにデータを書き込む処理を記述します。
まず、変数urlにPython超入門コースのコース一覧ページのURLを代入します。
そのurlをrequestsに渡してgetメソッドを使ってWebページのデータを取得して、変数rに代入をします。
次に、Webページへ移動する前に、次の処理に行かないように、time.sleep(3)で、3秒待機する記述をします。
例えば、このようなシンプルなHTMLであっても、HTMLの構造はこのようになっています。
“`python
soup = BeautifulSoup(r.text, ‘html.parser’)
“`
では早速、BeautifulSoupを使って、HTMLのデータを取得するする記述をします。
BeautifulSoup()と書いてカッコの中の、第1引数に、先ほど、取得したWebページが格納されている変数rに.textを追加したものを記述します。
第二引数には、’html.parser’と記述します。
これで、Python超入門コースのコース一覧のHTMLのデータが取得できました。
変数soupを表示させてみましょう。実行します。ずらーーーといろいろデータが取得できているようです。
“`python
soup
“`
“`python
contents = soup.find(class_=”entry-content”)
“`
これだとHTMLの構造がわかりにくいので、Google Chromeを使ってHTMLの構造をみてみましょう。
Google Chrome画面を右クリックするとメニュー画面が表示されます。
一番下にある「検証」を選択してみましょう。
HTMLのソースコードの中身が確認できます。
タイトルがリンク先が記述されているのはクラス”entry-content”内のテキストと、pタグ内のhrefに記載されているリンクです。
こちらが、entry-content部分のHTMLです。
aタグ内にあるhrefのリンクです。
これらを全て取得していきます。
続いて、BeautifulSoupのfindメソッドで取得したい部分のクラスを指定し、HTMLを取得します。
classアンダースコア、イコール、entry-contentを記述します。
classはPythonの予約語のため、アンダースコアをclassの後に追加します。
ちなみに、予約語とは、プログラムミングであらかじめ決められていて、変数名などに使用できない文字列のことです。
例えば、Pythonの予約語には、if, while, with, True, Falseなどがあります。
実行します。
これで「entry-content」のクラスの情報が変数contentsに代入されたはずです。
“`python
contents
“`
表示させてみましょう。
実行します。
entry-contentの情報が取得できています。
“`python
get_a = contents.find_all(“a”)
“`
次に、find_allメソッドで、entry-contentsクラス内にあるaタグを全て取得します。
実行します。
▼文字書き起こしブログ
(準備中)
▼自己紹介
現在:フリーランス
前職:リクルート
▼SNS
Twitter : https://twitter.com/kino_code/likes
Facebook : https://www.facebook.com/%E3%82%AD%E3%83%8E%E3%82%B3%E3%83%BC%E3%83%89-105693727500005/
Website : https://kino-code.com/
#PythonでWebスクレイピング #Python自動化 #PythonでRPA #Pythonできること
コメント
いつも楽しく拝見させていただいております。自分はPythonを用いて画像処理を行いたいと思っているのですが、講義をしていただけないでしょうか?
総務省管轄のサイト20万ページ分からスクレイピングしても良いですか?
勉強になります!
一行ごと何をしているのか理解することを意識して勉強します!