環境構築からWEBアプリ開発・スマホアプリ開発まで。ときには動画制作やゲームも。

supilog
すぴろぐ

【PythonでWEBスクレイピング】ヘッダ情報を付与する

【PythonでWEBスクレイピング】ヘッダ情報を付与する

前回、基本のスクレイピングをやってみたが、今回はヘッダ情報を追加してみる。

前回記事

ヘッダを設定する意味とは?

本ブログにChromeでリクエストした際のヘッダをデベロッパーツールでみてみるとこんな感じ。

ヘッダ情報を付与する意味はどこにあるのだろうか。

WEBページを作成する側の立場にたち考えると、ヘッダ情報を元に挙動やレスポンス内容を変更することが多々ある。一番わかり易いuser-agentを例にあげると、user-agentを見て、PC/スマホ表示を切り替えることも出来るし、許可しないuser-agentからのアクセスは正常なHTMLを返却しないことも出来る。

スクレイピングの際のアクセスが、不自然なヘッダ情報だった場合に、WEBサイト側から正常なレスポンスが取得出来ない事があるのである。

Pythonでリクエストにヘッダー情報を付与

前回書いたソースコードがこちら。(ちょっと修正しています)

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
from bs4 import BeautifulSoup
import requests
url = "https://supilog.supisupi.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
description = soup.find_all("div", class_="header-title-ja")
print(description[0].text)
from bs4 import BeautifulSoup import requests url = "https://supilog.supisupi.com" response = requests.get(url) soup = BeautifulSoup(response.text, "html.parser") description = soup.find_all("div", class_="header-title-ja") print(description[0].text)
from bs4 import BeautifulSoup
import requests

url = "https://supilog.supisupi.com"
response = requests.get(url)

soup = BeautifulSoup(response.text, "html.parser")
description = soup.find_all("div", class_="header-title-ja")
print(description[0].text)

このコードは、本ブログへアクセスしているので、この状態でアクセスログを見てみます。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
xx.xxx.xxx.xxx - - [23/Mar/2025:22:38:49 +0900] "GET / HTTP/1.1" 200 13805 "-" "python-requests/2.32.3" "-" "0.176"
xx.xxx.xxx.xxx - - [23/Mar/2025:22:38:49 +0900] "GET / HTTP/1.1" 200 13805 "-" "python-requests/2.32.3" "-" "0.176"
xx.xxx.xxx.xxx - - [23/Mar/2025:22:38:49 +0900] "GET / HTTP/1.1" 200 13805 "-" "python-requests/2.32.3" "-" "0.176"

「python-requests/2.32.3」からアクセスが来ましたよっていうログがバッチリ出てますね。

これを今回、以下のように変えてみます。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
from bs4 import BeautifulSoup
import requests
url = "https://supilog.supisupi.com"
headers = {
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36'
}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")
description = soup.find_all("div", class_="header-title-ja")
print(description[0].text)
from bs4 import BeautifulSoup import requests url = "https://supilog.supisupi.com" headers = { 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36' } response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, "html.parser") description = soup.find_all("div", class_="header-title-ja") print(description[0].text)
from bs4 import BeautifulSoup
import requests

url = "https://supilog.supisupi.com"
headers = {
  'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36'
}

response = requests.get(url, headers=headers)

soup = BeautifulSoup(response.text, "html.parser")
description = soup.find_all("div", class_="header-title-ja")
print(description[0].text)

headersという変数を定義して、”user-agent”を設定してみました。これは、現在のChrome(@わたしのmac)のuser-agentを設定してみたものである。

先ほどと同じように、ログを見てみるとどうだろう。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
xx.xxx.xxx.xxx - - [23/Mar/2025:22:44:16 +0900] "GET / HTTP/1.1" 200 13809 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36" "-" "0.170"
xx.xxx.xxx.xxx - - [23/Mar/2025:22:44:16 +0900] "GET / HTTP/1.1" 200 13809 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36" "-" "0.170"
xx.xxx.xxx.xxx - - [23/Mar/2025:22:44:16 +0900] "GET / HTTP/1.1" 200 13809 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36" "-" "0.170"

headerを追加することによりuser-agentを設定する、一番わかり易い例を提示してみたが、いかがでしょうか。

まとめ

ヘッダ情報の追加や変更は、アクセスの情報を一部偽装することに他ならない。悪意あるリクエストをするために利用するのは当然ダメなので、規約の範囲内で正しく利用することが必須。

スクレイピングは情報が取得できるのが楽しくて、ついつい規約等をおろそかにしがちなので、大事にならないよう十分注意しながら行いましょう。