【中級編2】PythonでWebページのデータをHTMLに保存しよう

Python入門

本記事ではPythonで取得したWebページをHTMLに保存する方法を解説します。

取得したデータを保存する方法には、大きく分けて2種類あります。

それぞれの方法を丁寧に解説していきましょう。

また、スクレイピングにおける注意点にも併せて触れてあります。

本記事を読むことで、スクレイピングの基礎が分かるようになります。

WebページのデータをHTMLに保存する方法

WebページのデータをHTMLに保存する方法を紹介します。

まずはrequestsモジュールを使った、一般的な方法を解説しましょう。

次のSTEPに分けて解説します。

  • Step1.Webページのデータを取得する
  • Step2.htmlファイルに保存する

1つ1つのSTEPについて詳しく解説しましょう。

Step1.Webページのデータを取得する

Webページのデータを取得する方法です。

○コード例

import requests

site_data = requests.get("https://news.yahoo.co.jp/")

requestsモジュールをまずimportします。

次にgetメソッドを使って、Webページを取得します。

ここまでは前回の記事でも解説したので、お分かり頂けるかと思います。

Step2.htmlファイルに保存する

getメソッドで取得したWebページをHTMLに保存する方法です。

Pythonでは、外部のファイルに保存する場合、open関数を使う必要があります。

○コード例

import requests

site_data = requests.get("https://news.yahoo.co.jp/")

with open("yahoo_news.html", "w") as f:
    f.write(site_data.text)

print("書き込みが完了しました")

○実行結果

openの第一引数に「ファイル名」、第二引数に「”w”」を入れています。

第二引数に「”w”」を入れてることで、open関数が「書き込みモード」になります。

書き込みモードでファイルを開いた後は、writeメソッドで書き込みます。

open関数に関して詳しく知りたい方は、【初級編2】Pythonでファイルを作成したり削除したりする方法を学ぼうを読んでください。

ここでは、Yahoo!ニュースのHTMLをそのまま書き込んでいます。

プログラムを実行し終わったら、プログラムと同じフォルダに「yahoo_news.html」があることを確認してください。

「yahoo_news.html」をダブルクリックすると、ページが開き、Yahoo!ニュースサイトがそのまま取得できたことが分かります。

urllib.requestを使ってHTMLに保存する方法

つづいて、urllib.requestモジュールを使う方法を見ていきましょう。

以下のSTEPに分けて解説します。

  • Step1.urllib.requestをimportする
  • Step2.WebページのURLとファイルを指定する
  • Step3.Webページをダウンロードする

こちらの方法もたまに使うので覚えておくと良いでしょう。

Step1.urllib.requestをimportする

まずは、urllib.requestをimportする必要があります。

いつも通り、ソースの冒頭にimport文を書きましょう。

○コード例

import urllib.request

urllib.requestは、HTTPリクエストの送信処理を行うためのモジュールです。

こちらを使うことで、Webページを取得できます

Step2.WebページのURLとファイルを指定する

つづいて、取得したいWebページのURLと、保存するファイル名を指定します。

○コード例

import urllib.request

url = "https://news.yahoo.co.jp/"
file = "yahoo_news.html"

ここでは、Yahoo!ニュースのURLを取得し、それを「yahoo_news.html」に保存します。

Step3.Webページをダウンロードする

最後にurlretrieveメソッドを使って、Webページをダウンロードすれば完了です。

○コード例

import urllib.request

url = "https://news.yahoo.co.jp/"
file = "yahoo_news.html"

urllib.request.urlretrieve(url, file)

print("書き込みが完了しました")

○実行結果

urlretrieveメソッドの第一引数にURL、第二引数にファイル名を入れてください。

こちらを実行すると、yahoo_news.htmlが先程と同じようにできています

このように、urllib.requestモジュールを使っても同様のことが可能です。

PythonでWebスクレイピングする際の注意点

PythonでWebスクレイピングする際、注意点がいくつかあります。

  • Webサイトに負荷を与えない
  • Webサイトが「スクレイピング禁止」か確認
  • 取得したデータを販売しない

特にWebサイトに負荷を与えてしまわないか、チェックしてださい。

プログラムから何度もサイトにアクセスすると、サイトに負荷を与えてしまい、迷惑がかかってしまいます。

何度もサイトにアクセスする場合、時間を開けて行うなど、工夫しましょう。

その他、サイトが「スクレイピング禁止」かも事前に確認してください。(Yahoo!ニュースはスクレイピング禁止ではありません)

また、他人のWebサイトは著作物ですので、取得データを複製して他人に譲渡することは法律で禁じられています

まとめ

本記事では、WebページデータをHTMLに保存する方法を解説しました。

requestsモジュールやurllib.requestモジュールを使うことで、Webページのデータが取得できます。

次回は、Webページの一部のみを取得する方法をご紹介しましょう。

これができるようになると、スクレイピングが実用的なものになります。

挫折率が高い??プログラミング学習のポイント
駆け出しエンジニアが一緒に学ぶ
CANITは、Progateやドットインストールで独学している人達同士をつなげます。駆け出しエンジニアのあなたのためのSNSです。
Python入門
【この記事を書いた人】
谷津弘樹

某自社開発のIT企業に勤めていた元webプログラマーです。主にサーバーサイド側を担当し、phpを使った開発経験があります。現在は退職しフリーランスライターとして活動中。IT系の記事を主に執筆し生計を立てています。

CANIT
タイトルとURLをコピーしました