Python クローラー: 高度なリクエスト
Cookie の処理
一般的に言えば、対処しなければならない Cookie はログインする必要があります。プロセスは、クライアントがログインした後、サーバーから返された Cookie を取得し、その Cookie を使用して URL を要求し、関連するコンテンツを取得します。したがって、上記の 2 つの操作を接続する必要があり、セッションを使用して要求を行うことができます。セッションは一連のリクエストと見なすことができ、このプロセス中に Cookie が失われることはありません。
セッションを使用
import requests
# 会话
session = requests.session()
data = {
#填网页抓取后需要登陆的登陆参数名,比如
#“loginname”:"password"
}
#登录
url = ""
session.post(url,data=data)
#上面的session中是有cookie的
resp = session.get("XXXXX") # XXXX表示存储数据的请求网页,需要在开发者模式下的network中寻找相关数据
クッキーを使用する
別の方法は、セッションを使用しない方法です。Web ページにログインした後、要求されたページの Cookie 値を開発者モードで取得し、それをヘッダーに追加して要求します。
import requests
resp = requests.get("XXXX",headers={
"Cookie":"XXXXXXXXX"
})
アンチヒルを使用してアンチクライミングを処理する
アンチリーチ: 現在のリクエストの上位レベルであるトレーサビリティと見なすことができます。リファラー アンチリーチングは、HTTP 要求でリファラー ヘッダーを取得し、リファラーに従ってソースを追跡し、ソースを識別して判断することに基づいています。
例: ナシのビデオをつかむ
1. ソースコードを解析し、実行時に srcurl を見つけます. 実際には、この srcurl はビデオの実際のアドレスではありません
.最後のアドレスの前半部分に systemtime を追加 文字列「content」と動画を開くための URL の最後の部分
コード:
#1.拿到contID
#2.拿到videoStatus返回的json -> srcURL
#3.srcUL中的内容进行修整
#4.下载视频
import requests
url = "https://www.pearvideo.com/video_1773900"
contID = url.split("_")[1]
videoStatusUrl = "https://www.pearvideo.com/videoStatus.jsp?contId=1773900&mrd=0.3066916683965706"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36",
#防盗链
"Referer": "https://www.pearvideo.com/video_1773900"
}
resp = requests.get(videoStatusUrl,headers=headers)
dic =resp.json()
srcUrl = dic['videoInfo']['videos']['srcUrl']
systemTime = dic['systemTime']
srcUrl = srcUrl.replace(systemTime,f"cont-{contID}")
#下载视频
with open("a.mp4",mode="wb") as f:
f.write(requests.get(srcUrl).content)
プロキシ (非推奨)
proxies = {
"https": "https://XXXXXX"
}
requests.get("XXXXXX",proxies=proxies)