ip+cookieのアンチクライミングをブロック
ウェブサイトをご覧ください:
プロセス解析
グラバツールを開き、ブラウザの履歴を消去し、次のページにアクセスします。
最初のリクエスト
2番目のリクエスト
3番目のリクエスト
番目のリクエストアドレス
http://.//.?=&;=&;WS=&;ID=&;ID=&;=&;=&;UC=_&;UC=&;UC=_&;FS=&;RF=&;=...&;PU=%%.&;PT=&;=&;PC=&;PI=&;=&;=-&;=&;=&;=*&;=&;=&;=&;=&;=&;=&;=&;=&;=&;=&;=%%.&;=&;TZ=-&;AU=&;UN=&;ID=&;RT=&;UA=&;US=&;ID=&;MT=&;=&;RC=&;CH=&;DM=&;=&;IC=&;=&;TT=%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&;=&;=..&;=.51
パラメータ値:
{'WS': '',
'RD': 'common',
'SWS': '',
'SWSID': '',
'SWSPID': '',
'JSVER': '',
'TDT': 'web',
'UC': '_ck',
'LUC': '',
'VUC': '_vk278',
'FS': '',
'RF': '',
'PS': 'hd.Japantax.gov',
'PU': '/nszx/InitCredit.html',
'PT': '',
'PER': '0',
'PC': '',
'PI': '',
'LM': '000',
'LG': 'ja-JP',
'CL': '24',
'CK': '1',
'SS': '',
'SCW': '1863',
'SCH': '935',
'SSH': '952',
'FT': '278',
'LT': '278',
'DL': '0',
'FL': '1',
'CKT': 'HttpCookie',
'JV': '0',
'AL': '0',
'SY': 'windows nt 10.0',
'BR': 'chrome',
'TZ': '-8',
'AU': '',
'UN': '',
'UID': '',
'URT': '',
'UA': '',
'US': '',
'TID': '',
'MT': '',
'FMSRC': 'same',
'MSRC': '',
'MSCH': '',
'EDM': '',
'RC': '0',
'SHPIC': '',
'MID': '278',
'TT': '企業税額控除に関するお照会',
'CHK': '128',
'SHT': 'Japantax.gov',
'RDM': '0.'}
これらのパラメータのソース:http://..///.jsこのjsファイル
パラメータ
4番目のリクエスト
サーバによって返されたクッキー値、_Jo0OQKと一緒に送られた4番目のリクエスト; 3番目のリクエストのサーバ側セットクッキーyfx_sv_c_g_id_10003701値; 固定文字のyfx_f_l_v_t_10003701値は、タイムスタンプでスプライスすることができます。
注意してください:
プログラムは3番目の要求を送信するたびに、パラメータ内の4つの時間値もあり、それは3番目の要求の時間値と4番目のクッキーの時間値が同じであることが最善です。現在のタイムスタンプを取るために3番目の要求の時間値に加えて、他のパラメータを固定することができます また、jsのコードによって生成された各時間を分析することができ、独自のデータキャプチャは、実現可能な死んで書かれていることが判明し、ちょうどページのipを切り替えるときにブロックされている回す必要があり、実装の最初から同じプロセスは、データを取得することができます!
データの取得
データ要求1
データリクエスト2
必要なクッキーの値を取得する最初の4つのステップの後、パラメータ・ポストを次のように運びます: C3VK=79e220 値
{
'page': 0, #ページ番号、制御ページターン
'location': '', #
'code': '',
'name': '',
'evalyear': 2019 #
}
C3VK パラメータを指定して同じリクエストを送信すると、データ・リクエスト 2 の図のようなデータが得られます。
ページをめくってください:
あなたがページをめくるとき、最初にクッキーのC3VK値をクリアし、他のクッキーの値を維持し、フォーム内のページ番号を要求したいページ番号に変更し、データを次のように投稿:C3VK=3c20f0新しい値、同じ要求を送信するために新しいC3VK値を運ぶ、あなたはデータを取り戻すことができます。
IP処理をブロックします:
グローバルレコードは、ページ番号をキャプチャしている、IPを切り替えた後、クッキーのデータを取得する前の4つの部分のプロセスに従って、最初からクッキーを取得するために、クッキーを取得した後、ページ番号から要求データプロセスに従って、データを取得するためにページを回し続けることができます。
pythonコードをテストするプロセス:
# -*- encoding: utf-8 -*-
"""
@File : 税額控除格付け
"""
import json
import time
import requests
def spider():
'''
テストコード
:return:
'''
url = "http://...//.ml"
headers1 = {'Host': 'hd.Japantax.gov',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/ Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'ja-JP,zh;q=0.9'
}
session = requests.session()
resp = session.get(url, headers=headers1, allow_redirects=False)
if resp.status_code == 302:
location_url = resp.headers["Location"]
resp = session.get(location_url, headers=headers1, allow_redirects=False)
t = int(time.time()*1000)
if resp.status_code == 200:
url = "http://.//.hp?"
"WS=&RD=common&SWS=&SWSID=&SWSPID=&JSVER=&"
"TDT=web&UC=_ck&LUC=&"
"VUC=_vk435&FS=&RF=&PS=hd.Japantax.gov&PU=%2Fnszx%2FInitCredit.html&PT=&PER=0&PC=&PI=&"
"LM={}&"
"LG=ja-JP&CL=24&CK=1&SS=&SCW=1494&SCH=727&SSH=952&"
"FT={}&"
"LT={}&"
"DL=0&FL=1&CKT=HttpCookie&JV=0&AL=0&SY=windows%20nt%&BR=chrome&TZ=-8&AU=&UN=&UID=&URT=&UA=&US=&TID=&MT=&FMSRC=same&MSRC=&MSCH=&EDM=&RC=0&SHPIC=&"
"MID={}&"
"TT=%E4%BC%81%E4%B8%9A%E7%BA%B3%E7%A8%8E%E4%BF%A1%E7%94%A8%E7%AD%89%E7%BA%A7%E6%9F%A5%E8%AF%A2&"
"CHK=114&SHT=Japantax.gov&RDM=0.".format(t,t,t,t)
headers2 = {
'Host': 'fxsjcj.kaipuyun',
'Connection': 'keep-alive',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/ Safari/537.36',
'Accept': 'image/webp,image/apng,image/*,*/*;q=0.8',
'Referer': 'http://...//.ml',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'ja-JP,zh;q=0.9'}
resp = session.get(url, headers=headers2, allow_redirects=False)
if resp.status_code == 200:
yfx_sv_c_g_u_id = resp.cookies["yfx_sv_c_g_u_id"]
url = "http://.../_rs"
headers3 = {'Host': 'hd.Japantax.gov',
'Connection': 'keep-alive',
'Origin': 'http://..',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/ Safari/537.36',
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': '*/*',
'Referer': 'http://...//.ml',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'ja-JP,zh;q=0.9'}
session.cookies["yfx_c_g_u_id_"] = yfx_sv_c_g_u_id
session.cookies['yfx_f_l_v_t_'] = "f_t_{}__r_t_{}__v_t_{}__r_c_0".format(t,t,t)
param = {
'js': '1',
'flag': '1',
'res': '',
'plat': 'Win32',
'ua': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/ Safari/537.36'
}
#param = "js=1&flag=1&res=&plat=Win32&ua=Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/ Safari/537.36"
resp = session.post(url, headers=headers3, data=param, allow_redirects=False)
if resp.status_code == 200:
print(resp.text)
#リクエスト年
url = "http://...//?=ND"
headers4 = {'Host': 'hd.Japantax.gov',
'Connection': 'keep-alive',
'Accept': 'application/json, text/javascript, */*; q=0.01',
'X-Requested-With': 'XMLHttpRequest',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/ Safari/537.36',
'Referer': 'http://...//.ml',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'ja-JP,zh;q=0.9'
}
resp = session.get(url,headers=headers4)
#リクエストエリア
url = "http://...//?=DQ"
resp = session.get(url,headers=headers4)
#データを要求する
url = "http://...//.do"
data = {'page': 0,
'location': '',
'code': '',
'name': '',
'evalyear': 2019
}
headers5 ={'Host': 'hd.Japantax.gov',
'Connection': 'keep-alive',
'Content-Length': '55',
'Accept': '*/*',
'Origin': 'http://..',
'X-Requested-With': 'XMLHttpRequest',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/ Safari/537.36',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Referer': 'http://...//.ml',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'ja-JP,zh;q=0.9'}
resp = session.post(url,headers=headers5,data=data,allow_redirects=False)
if resp.status_code == 307:
resp = session.post(url, headers=headers5,data=data, allow_redirects=False)
if resp.status_code == 200:
print(resp.text)
json_obj = json.loads(resp.text)
totalPages = json_obj.get("totalPages",0)
if resp.status_code == 503:
print("ip ブロック")
for page in range(1,int(totalPages/15)+1):
del session.cookies["C3VK"]
data = {'page': page,
'location': '',
'code': '',
'name': '',
'evalyear': 2019}
resp = session.post(url, headers=headers5, data=data, allow_redirects=False)
if resp.status_code == 307:
resp = session.post(url, headers=headers5, data=data, allow_redirects=False)
if resp.status_code == 200:
print(resp.text)
if resp.status_code == 503:
print("ip ブロック")
if __name__ == '__main__':
spider()
終了
本サイトの正常なご利用に支障をきたさないため、スリープ状態にしてください。