Python クローラー - クローラーのカモフラージュと「アンチクロール」

序文

爬虫類の迷彩と「対ハイハイ」は、爬虫類の分野において非常に重要なテーマです。カモフラージュにより、クローラーを通常のブラウザーまたはアプリケーションに近づけることができるため、サーバーによってブロックされるリスクが軽減されます。アンチ「アンチクロール」は、サーバーの強化に対応するアンチクローラー メカニズムです。以下では、いくつかの一般的なカモフラージュおよびクロール防止技術を詳細に紹介し、対応するコード ケースを示します。

 

1. ユーザーエージェントの偽装

User-Agent は HTTP リクエスト ヘッダーの一部であり、ブラウザーや携帯電話などで使用されるアプリケーションに関する情報が含まれています。クローラーでは、デフォルトの User-Agent を使用するか、サーバーによって簡単にロボットとして認識される、クローラーで一般的に使用される User-Agent を使用するため、User-Agent を偽装する必要があります。User-Agent ヘッダーは、Python のリクエスト ライブラリを使用して簡単に追加できます。

import requests

# 设置User-Agent头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}

# 请求URL
url = 'https://www.example.com'

# 发送请求
response = requests.get(url, headers=headers)

# 输出响应内容
print(response.text)
2.IPプロキシ

単一の IP によるサーバーへの頻繁なアクセスは禁止されやすいため、IP プロキシを使用して Web サイトにアクセスできます。IP プロキシには無料と有料がありますが、ここでは無料の IP プロキシを使用します。プロキシ サーバーのセットアップは、Python のリクエスト ライブラリを使用すると簡単です。

import requests

# 设置代理服务器
proxies = {
    'http': 'http://127.0.0.1:1080',
    'https': 'https://127.0.0.1:1080'
}

# 请求URL
url = 'https://www.example.com'

# 发送请求
response = requests.get(url, proxies=proxies)

# 输出响应内容
print(response.text)
3. ランダムアクセス間隔

サーバーへの頻繁なアクセスはロボットであると認識されやすいため、Webサイトにアクセスする人間の動作をシミュレートし、アクセス時間間隔をランダムに設定する必要があります。アクセス間隔は、Python の time ライブラリを使用して簡単に設定できます。

import requests
import time
import random

# 设置User-Agent头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}

# 请求URL
url = 'https://www.example.com'

# 随机访问时间间隔
time.sleep(random.randint(0, 3))

# 发送请求
response = requests.get(url, headers=headers)

# 输出响应内容
print(response.text)
4. クッキーの偽装

一部の Web サイトではアクセスするためにログインが必要であり、ログイン状態をシミュレートするために Web サイトにアクセスするときに Cookie を保持する必要があります。Cookie は、Python のリクエスト ライブラリを使用して簡単に設定できます。

import requests

# 设置User-Agent头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}

# 设置cookie
cookies = {
    'sessionid': 'xxxx'
}

# 请求URL
url = 'https://www.example.com'

# 发送请求
response = requests.get(url, headers=headers, cookies=cookies)

# 输出响应内容
print(response.text)
5. キャプチャ認識ライブラリを使用する

一部の Web サイトでは検証コードの識別が必要ですが、識別には OCR などのテクノロジーを使用できます。ここでは、Python の Tesseract-OCR ライブラリを使用して検証コードを識別します。

import requests
import pytesseract
from PIL import Image

# 设置User-Agent头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}

# 请求验证码图片
url = 'https://www.example.com/captcha.png'
response = requests.get(url, headers=headers)

# 保存验证码图片
with open('captcha.png', 'wb') as f:
    f.write(response.content)

# 对验证码图片进行识别
captcha_image = Image.open('captcha.png')
captcha_text = pytesseract.image_to_string(captcha_image)

# 输出验证码文本
print(captcha_text)
6. 動的解析ページ

一部の Web サイトでは、フロントエンドでデータを非同期に読み込むために JS を使用していますが、この場合、ページを動的に解析するには Selenium などのツールが必要です。ここでは、Python の Selenium ライブラリを使用して、Web サイトにアクセスするブラウザをシミュレートします。

from selenium import webdriver

# 设置User-Agent头
options = webdriver.ChromeOptions()
options.add_argument(
    'user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3')

# 请求URL
url = 'https://www.example.com'

# 使用Selenium打开网页
driver = webdriver.Chrome(options=options)
driver.get(url)

# 执行JS代码
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

# 获取响应内容
response = driver.page_source

# 输出响应内容
print(response)

# 关闭浏览器
driver.quit()
7. 複数のアカウントを順番に使用できます

頻繁なアクセスのためにアカウントがブロックされている場合、複数のアカウントを使用して順番に Web サイトにアクセスできます。ここでは、Python のランダム ライブラリを使用してアカウントをランダムに選択します。

import requests
import random

# 用户列表
users = [
    {'username': 'user1', 'password': 'password1'},
    {'username': 'user2', 'password': 'password2'},
    {'username': 'user3', 'password': 'password3'}
]

# 随机选择一个账号
user = random.choice(users)

# 构造登录信息
data = {
    'username': user['username'],
    'password': user['password']
}

# 请求登录URL
login_url = 'https://www.example.com/login'
response = requests.post(login_url, data=data)

# 输出响应内容
print(response.text)

要約する

一般に、カモフラージュの目的は爬虫類を人間の行動に近づけることであり、アンチ「アンチハイハイ」の目的は複雑な対爬虫類メカニズムに対処することです。実際の爬虫類プロジェクトでは、特定の状況に応じて適切なカモフラージュおよび「アンチハイハイ」技術を選択する必要があります。

おすすめ

転載: blog.csdn.net/wq10_12/article/details/132229478