CodeGym /コース /Python SELF JA /スクレイピング制限を回避する方法: user-agent、cookiesの設定やブロック回避のコツ

スクレイピング制限を回避する方法: user-agent、cookiesの設定やブロック回避のコツ

Python SELF JA
レベル 33 , レッスン 0
使用可能

1. スクレイピング制限の入門

今日はちょっとスリリングな話題、スクレイピングの制限をどのように回避するかについて話します。スクレイピングに興味を持ったプログラマーなら、いずれサイト側の制限やブロックとぶつかることになります。そろそろ、どうやって私たち「良い子」がサイトの防衛システムにひっかからず、少しだけデータをいただいても怒られないようにするか、学びましょう。

ウェブサイトにリクエストを送信するたびに、いわばそのサイトの「パーソナルスペース」に踏み込んでデータをいただこうとしています。でも、なぜサイトはそんなに厳しいのでしょうか?理由は様々で、著作権保護、サーバーの信頼性やパフォーマンスの維持、不正使用の防止などがあります。もしあなたがサイトのリソースを過度に消費したり、ルールを破ったりすると、基本的には...ブロックされてしまうかもしれません。誰もブロックされるのは好きじゃないですよね。まぁ、サーバー管理者以外は。

2. user-agentの設定

user-agentとは?

user-agentとは、ブラウザがHTTPリクエストと一緒に送信する識別文字列です。これはサーバーにあなたが使っているブラウザやOSの情報を伝えます。そして、知ってましたか?このuser-agentは簡単に偽装できるんです。サーバーに「最新のiPhoneからアクセスしてますよ~」と思わせることも可能です。本当はPythonスクリプトを使っているのにね。

user-agentを変更する例

Pythonのrequestsライブラリを使えば、user-agentを変更するのは簡単。以下はその例:

Python

import requests

url = "https://example.com"

# user-agentをChromeブラウザに変更
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36"
}

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

user-agentを偽装するのは、まるでパンダの着ぐるみを着て会社のパーティーに行くようなもの。中身はあなたでも、見た目は別物です。サーバーは「ブラウザ」だと思って許可してくれるかもしれません。

3. cookiesの利用

cookiesとは?

cookiesとは、ウェブサイトがブラウザに保存する小さなデータの断片のことです。これにはサイト設定やセッションIDなど、様々な情報が含まれます。ログイン後もシステムに留まり続けるための仕組みですね。

リクエストでcookiesを使う方法

Pythonのrequestsでcookiesを扱うのも簡単です。通常、最初のリクエストでcookiesを取得し、その後のリクエストで使用します:

Python

# cookiesを保持するセッションを作成
session = requests.Session()

# 最初のリクエストでcookiesを取得
session.get(url)

# 次のリクエストで同じcookiesを使用
response = session.get(url)
print(response.content)

セッションはcookiesのための公共交通機関みたいなもの。ウェブサイト間を移動しながら設定を保持します。

4. ブロック回避の方法

ブロックされる可能性を減らすためのコツ

いくつかのヒント:

  • リクエスト間の遅延: リクエストの間にランダムな遅延を追加し、ロボットと疑われないようにしましょう。
  • IPアドレスの変更: VPNやプロキシを使用してIPアドレスを変更し、この情報でブロックされないようにしましょう。
  • user-agentのローテーション: 毎回異なるuser-agentを設定し、異なるブラウザのように見せましょう。

遅延とIPアドレス変更の実例

timeライブラリを使って遅延を追加します:

Python

import time
import random

for _ in range(10):
    response = session.get(url)
    # ランダムな遅延
    time.sleep(random.uniform(1, 3))

requestsでIPアドレスを変更するにはプロキシを使用します:

Python

proxies = {
    "http": "http://10.10.10.10:8000",
    "https": "https://10.10.10.10:8000",
}

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

5. その他の欺瞞テクニック

スクリプトが疑われにくいようにするには、headerscookiesを使って本物のユーザーを模倣します。覚えておいてください: リアリズムは、ブロックとの戦いでの秘密兵器です。

今日の講義はここまで。このテクニックを使えば、ウェブサイトのレーダーに「明るく表示されず」データを収集し続けられるでしょう。ただし、どんなスーパーヒーローにも責任があるように、これらのテクニックを倫理的かつ合法的に使用してください。自分のコードを信じて、そして猫がキーボードで踊るようにエレガントなコードを書きましょう!

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION