Python PR

【Python】任意のサイトのHTMLを文字列で取得する方法

記事内に商品プロモーションを含む場合があります

この記事では、Pythonで任意のURLからそのサイトのHTMLを文字列型で取得する方法を解説します。

HTMLを文字列で取得することでlxmlライブラリなどを使ってサイトを解析したり、スクレイピングしたりできます。

それでは、URLからHTMLを文字列として取得する方法を見ていきましょう!

URLを開く

任意のURLをソースコード内から開くには、以下の2通りの方法があります。

  • urllib.requestモジュールを使う
  • Requestsパッケージを使う

標準モジュールしか使用できないような状況ではurllibモジュールを使い、それ以外はRequestsパッケージを使いましょう!

urllib.requestモジュールで開く

urllib.requestモジュールのurlopen()関数を使ってURLを開きます。

urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)

試しに適当なURLを開いてみましょう!

import urllib.request # 適当なURL url = 'https://yumarublog.com/python/str' # URLを開く r = urllib.request.urlopen(url) # 出力 print(r) print(type(r)) # URLを閉じる r.close()

実行結果

<http.client.HTTPResponse object at 0x106c2d430> <class 'http.client.HTTPResponse'>

URLを閉じる後処理が必要なのでwith文を使った方が安全です。

import urllib.request # 適当なURL url = 'https://yumarublog.com/python/str' # URLを開く with urllib.request.urlopen(url) as r: # 出力 print(r) print(type(r))

Requestsパッケージで開く

Requestsパッケージは標準モジュールではないのでpipを使ってインストールします。

ターミナル、またはコマンドプロンプト

python -m pip install requests

そしたら、requests.get()を使ってURLを開きます。

requests.get(url, params=None, **kwargs)

試しに適当なURLを開いてみます。

import requests # 適当なURL url = 'https://yumarublog.com/python/str' # # URLを開く r = requests.get(url) # 出力 print(r) print(type(r))

実行結果

<Response [200]> <class 'requests.models.Response'>

HTMLを文字列で取得

開いたページのHTMLを文字列として取得してみます。HTMLはbytes型で取得されるので文字列型にデコードする必要があります。

RequestsではURLを開いた時に生成したレスポンスのtext属性から文字列型のHTMLを取得できます。

import requests # 適当なURL url = 'https://yumarublog.com/python/str' # URLを開く r = requests.get(url) # bytes型でHTMLを取得 print(r.text)

実行結果

<!DOCTYPE html> <html lang="ja"> <head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# article: http://ogp.me/ns/article#"> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- ここからOGP --> <meta property="og:type" content="blog"> ...省略

urllib.requestでは、レスポンスからread()メソッドを呼び出すことでbytes型のHTMLを取得できます。bytes型なので文字列にデコードする必要があります。

import urllib.request # 適当なURL url = 'https://yumarublog.com/python/str' # URLを開く with urllib.request.urlopen(url) as r: # bytes型で取得 print(r.read()) # デコード print(r.read().decode('UTF-8'))

Requestsbytes型のHTMLを取得したい場合はcontent属性から取得できます。

まとめ

この記事では、urllib.requestモジュールとRequestsパッケージを使ってURLからHTMLを文字列で取得する方法を解説しました。

HTMLを文字列で取得することでサイトのデータを収集することができます。

ただし、サイトを高速で開いたりするとサーバーに負荷がかかるのでtimeモジュールのsleep()などを使って負荷がかからないようにしましょう!

HTMLParserを使ってHTML文字列を解析する方法

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ