序文
爬虫類といえば、私は大学時代に PHP + CURL を使用して実装し、その後 Java + WebMagic を使用して実装しました。今、私は Python に触れるようになり、Python の構文とフレームワークを理解し始め、Python を使用して HTTP リクエストを作成したところ、関数の実装という点では、PHP や Java に比べて、Python の方が便利で、簡潔で、効率的であることがわかりました。
この例では、サーバーはセッションに基づいてクライアントとのセッション接続を維持します。つまり、各クライアントが初めてサーバーにアクセスすると、クライアントの Cookie 情報がクリアされない限り、サーバーはそのセッションに対してセッションを開きます。ユーザーによって、または
以下では、Python のリクエスト依存関係ライブラリを使用して、クライアントのシミュレートされたログインを実装します。
1. 動作環境
Python => 3.11.2
urllib3 => 1.26.15
2. コード例
(1)index.py
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
import requests
import json
import urllib3
urllib3.disable_warnings() # InsecureRequestWarning: Unverified HTTPS request is being made to host 'xxx'. Adding certificate verification is strongly advised.
# 实例化 session 对象
session = requests.session()
# 打印前后的请求标头
headers = {
"Content-Type": 'application/json',
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36"
}
print('原 session 的请求标头' + str(session.headers))
session.headers = headers
print('新 session 的请求标头' + str(session.headers))
# 更新为使用账号密码登录成功的 session 对象
url = 'https://xxx.com/api/login' # 登录接口
data = {
'username': '',
'password': ''
}
response = session.post(url, data=json.dumps(data), headers=headers, verify=False)
if response.status_code == 200:
print('尊敬的用户,' + '您已模拟登录 成功~')
print(response.text)
print(response.cookies)
else:
print('模拟登录 失败!')
print('\n')
# 爬取 getUserList 接口数据
userListUrl = 'https://xxx.com/api/getUserList' # 目标接口
response = session.get(userListUrl, headers=headers, cookies={}, verify=False)
if response.status_code == 200:
print('爬取接口 成功~')
print(response.text)
else:
print('爬取接口 失败!')
3. 運用効果
D:\Python3.11\python.exe D:\workspace\python3_django4_web\python3_django4_web\simulated_client\index.py
原 session 的请求标头{'User-Agent': 'python-requests/2.28.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
新 session 的请求标头{'Content-Type': 'application/json', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36'}
尊敬的XXX用户,您已模拟登录 成功~
{"success":true,"statusCode":200,"data":"..."}
<RequestsCookieJar[...]>
爬取接口 成功~
{"success":true,"statusCode":200,"data": [...]}
Process finished with exit code 0