1. スクレイピング制限の入門
今日はちょっとスリリングな話題、スクレイピングの制限をどのように回避するかについて話します。スクレイピングに興味を持ったプログラマーなら、いずれサイト側の制限やブロックとぶつかることになります。そろそろ、どうやって私たち「良い子」がサイトの防衛システムにひっかからず、少しだけデータをいただいても怒られないようにするか、学びましょう。
ウェブサイトにリクエストを送信するたびに、いわばそのサイトの「パーソナルスペース」に踏み込んでデータをいただこうとしています。でも、なぜサイトはそんなに厳しいのでしょうか?理由は様々で、著作権保護、サーバーの信頼性やパフォーマンスの維持、不正使用の防止などがあります。もしあなたがサイトのリソースを過度に消費したり、ルールを破ったりすると、基本的には...ブロックされてしまうかもしれません。誰もブロックされるのは好きじゃないですよね。まぁ、サーバー管理者以外は。
2. user-agent
の設定
user-agent
とは?
user-agentとは、ブラウザがHTTPリクエストと一緒に送信する識別文字列です。これはサーバーにあなたが使っているブラウザやOSの情報を伝えます。そして、知ってましたか?このuser-agent
は簡単に偽装できるんです。サーバーに「最新のiPhoneからアクセスしてますよ~」と思わせることも可能です。本当はPythonスクリプトを使っているのにね。
user-agent
を変更する例
Pythonのrequests
ライブラリを使えば、user-agent
を変更するのは簡単。以下はその例:
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を取得し、その後のリクエストで使用します:
# 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
ライブラリを使って遅延を追加します:
import time
import random
for _ in range(10):
response = session.get(url)
# ランダムな遅延
time.sleep(random.uniform(1, 3))
requests
でIPアドレスを変更するにはプロキシを使用します:
proxies = {
"http": "http://10.10.10.10:8000",
"https": "https://10.10.10.10:8000",
}
response = requests.get(url, proxies=proxies)
5. その他の欺瞞テクニック
スクリプトが疑われにくいようにするには、headers
とcookies
を使って本物のユーザーを模倣します。覚えておいてください: リアリズムは、ブロックとの戦いでの秘密兵器です。
今日の講義はここまで。このテクニックを使えば、ウェブサイトのレーダーに「明るく表示されず」データを収集し続けられるでしょう。ただし、どんなスーパーヒーローにも責任があるように、これらのテクニックを倫理的かつ合法的に使用してください。自分のコードを信じて、そして猫がキーボードで踊るようにエレガントなコードを書きましょう!
GO TO FULL VERSION