blog

税金Aリストのクローリング

プログラムは3番目の要求を送信するたびに、パラメータ内の4つの時間値もあり、それは3番目の要求の時間値と4番目のクッキーの時間値が同じである場合に最適です。 C3VKパラメータを運んで同じ要求を送って...

May 19, 2020 · 6 min. read
シェア

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()

終了

本サイトの正常なご利用に支障をきたさないため、スリープ状態にしてください。

Read next

JavaScriptCoreを使って実際の問題を解決する。

一般的に、インターフェースはjson形式の文字列を返します。 しかし、--------はjsで使われるjsコードを返す特別なインターフェイスを持っています。 この場合、返すインターフェイスを制御するパラメータを追加できるかどうか、インターフェイスと相談するのがベストです。 インターフェースはjsコードを返すので、それを実行することができます。 インターフェイスが返すデータをシミュレートします。...

May 18, 2020 · 2 min read