Bonjour tout le monde,Je suis hottie..
Attrape la cible:
url:http://webapi.cninfo.com.cn/#/marketDataDate Objectif des données: Accès Code des titres Titre abrégé Date de la transaction Prix d'ouverture Prix maximum Prix le plus bas Prix de clôture Nombre de transactions Les difficultés: Paramètres de l'en - tête de la requêtemcode Génération cryptographique
1. requests 2. execjs 3. js2py 4. math 5. time 6. pandas
1. Google explorer 2. pycharm 3. python3.7
Aller à la page,Clic droit de la souris,Sélectionner la vérification -> Outil de développement de navigateur pop - up -> Netword -> Sélectionnerxhr -> Rafraîchir la page
Interface trouvée , Observer les données de l'interface :
Cette interface est postDemande, Deux paramètres de formulaire doivent être soumis .
Fragment de code:
url = 'http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1015'
data = {
'tdate': datetime,
'scode': '399001'
}
headers = {
'mcode': 'MTYzNTEzOTkxMQ==',
'Referer': 'http://webapi.cninfo.com.cn/',
'Cookie': 'Hm_lvt_489bd07e99fbfc5f12cbb4145adb0a9b=1634795282; Hm_lpvt_489bd07e99fbfc5f12cbb4145adb0a9b=1634799860',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36'
}
response = requests.post(url, headers=headers, data=data).json()
Demande acceptée, Mais il y a un problème de prescription. , Après quelques minutes, , Il n'y a pas d'accès. , Un examen attentif révèle des paramètres spéciaux mcode.
C'est parti.JS Trouver l'emplacement de génération des paramètres de chiffrement : ( Notez que la page doit être rafraîchie , Ou est - ce que ça va arriver? jsLa situation)
Voilà le problème.,Plusieurs.jsDocumentation, Comment être sûr que c'est ce dont nous avons besoin? ?
Utiliser la deuxième méthode de recherche ,Selonurl Recherche d'adresses demandées pour :
Après le point d'arrêt Rafraîchir la page directement Début de la mise en service
var indexcode={
getResCode:function(){
var time=Math.floor(new Date().getTime()/1000); return window.JSonToCSV.missjson(""+time);
}
}
Continuer la mise en service,Regarde ça.missjsonQu'est - ce que c'est?.
Prends ça. js Exécution
import requests
import execjs
import js2py
import math
import time
import pandas as pd
code_list = []
def MCODE():
jscode = '''
function missjson(input) {
var keyStr = "ABCDEFGHIJKLMNOP" + "QRSTUVWXYZabcdef" + "ghijklmnopqrstuv" + "wxyz0123456789+/" + "=";
var output = "";
var chr1, chr2, chr3 = "";
var enc1, enc2, enc3, enc4 = "";
var i = 0;
do {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}
output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2)
+ keyStr.charAt(enc3) + keyStr.charAt(enc4);
chr1 = chr2 = chr3 = "";
enc1 = enc2 = enc3 = enc4 = "";
} while (i < input.length);
return output;
}
'''
time1 = js2py.eval_js('Math.floor(new Date().getTime()/1000)')
# pyComment
a = math.floor(time.time() / 1000)
mcode = execjs.compile(jscode).call('missjson', '{a}'.format(a=time1))
return mcode
def PageRquest(datetime, mcode):
# L'interface peut être changée
url = 'http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1015'
data = {
'tdate': datetime, # Temps d'acquisition des données
'scode': '399001' # Code stock Et abréviation de la Bourse
}
headers = {
'mcode': str(mcode),
'Referer': 'http://webapi.cninfo.com.cn/',
'Cookie': 'Hm_lvt_489bd07e99fbfc5f12cbb4145adb0a9b=1634795282; Hm_lpvt_489bd07e99fbfc5f12cbb4145adb0a9b=1634799860',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36'
}
response = requests.post(url, headers=headers, data=data).json()
code = response['records']
for i in code:
code_list.append(i)
def main(date):
mcode = MCODE()
PageRquest(date, mcode)
if __name__ == '__main__':
# main()
# Analyse des données pandas Bureautique
datetime = pd.period_range('2021/5/1', '2021/10/20', freq='B')
for date in datetime:
main(date)
df = pd.DataFrame(code_list)
df.to_excel('code.xlsx')
Dépannage、Matériel d'apprentissage、Feuille de routeRechercher ci - dessous