IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

parsing et anti-ddos [Python 3.X]


Sujet :

Python

  1. #1
    Membre éclairé
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 513
    Points : 700
    Points
    700
    Par défaut parsing et anti-ddos
    Bonjour,

    j'ai fait un script pour parser une site web, le voici (en entier):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
     
    # -*- coding: utf-8 -*-
     
    import requests
    import bs4
    import json
     
     
    try:
    	with open('recipe.json', 'r', encoding='utf-8') as file:
    		recipe = json.load(file)
    except:
    	recipe = {}
     
    def get_link_recipe(url):
    	sess = requests.session()
    	r = sess.post(url)
    	soup = bs4.BeautifulSoup(r.text, 'html.parser')
    	for elem in soup.find_all("table", attrs={"class": "ak-table ak-responsivetable"}):
    		url_of_recipe = elem.find_all("span", attrs={"class": "ak-linker"})
     
    	list_url_of_recipe = []
    	for i in url_of_recipe:
    		list_url_of_recipe.append('https://www.dofus.com' + str(i).split('"')[3])
    	return set(list_url_of_recipe)
     
    nb = 0
    def get_recipe(url):
    	global nb
    	sess = requests.session()
    	r = sess.post(url)
    	soup = bs4.BeautifulSoup(r.text, 'html.parser')
     
    	if not soup.find_all("div", class_="ak-container ak-panel ak-crafts"): # pas de recette
    		return
     
     
    	category_of_parsed_item = soup.find("div", class_="ak-encyclo-detail-type col-xs-6") # catégorie de l'item parsé
    	if not category_of_parsed_item.text.split()[-1] in recipe:
    		recipe[category_of_parsed_item.text.split()[-1]] = {}
     
     
    	name_of_parsed_item = soup.find("h1", class_="ak-return-link") # nom de l'item parsé
    	for i in name_of_parsed_item.text.split('\n'):
    		if i:
    			name_of_parsed_item = i
     
     
    	for elem in soup.find_all("div", class_="ak-container ak-panel ak-crafts"):
    		name_of_ressource = elem.find_all("span", class_="ak-linker")
    		quantity_of_ressource = elem.find_all("div", class_="ak-front")
    		category_of_ressource = elem.find_all("div", class_="ak-text")
     
     
    	list_name_of_ressource = []
    	for i in name_of_ressource:
    		for j in i.text.split('\n'):
    			if j:
    				list_name_of_ressource.append(j)
     
    	list_quantity_of_ressource = []
    	for i in quantity_of_ressource:
    			list_quantity_of_ressource.append(int(i.text.split()[0]))
     
    	list_category_of_ressource = []
    	for i in category_of_ressource:
    		list_category_of_ressource.append(i.text)
     
    	a = []
    	for i in zip(list_quantity_of_ressource, list_name_of_ressource, list_category_of_ressource):
    		a.append(i)
     
    	recipe[category_of_parsed_item.text.split()[-1]][name_of_parsed_item] = a
     
    	with open('recipe.json', 'w', encoding='utf-8') as f:
    		json.dump(recipe, f, sort_keys=True, indent="\t", ensure_ascii=False)
    	print('recette de : ', name_of_parsed_item)
    	nb +=1
     
     
    # urls = get_link_recipe('https://www.dofus.com/fr/mmorpg/encyclopedie/equipements?size=2620')
    urls = get_link_recipe('https://www.dofus.com/fr/mmorpg/encyclopedie/equipements')
    for url in urls:
    	get_recipe(url)
    print(nb, "recettes ajoutées")
    Le problème est que au bout de quelques minutes il se bloque, et j'ai <title>Access denied | [www.dofus.com] used Cloudflare to restrict access</title> dans le soup, y'as t'il un moyen de contourner l'anti-ddos ? je testerait avec time.sleep mais pour l'instant je suis toujours blacklisté ..

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par flapili Voir le message
    Le problème est que au bout de quelques minutes il se bloque, et j'ai <title>Access denied | [www.dofus.com] used Cloudflare to restrict access</title> dans le soup, y'as t'il un moyen de contourner l'anti-ddos ? je testerait avec time.sleep mais pour l'instant je suis toujours blacklisté ..
    "contourner l'anti-ddos", c'est violer la politique du sécurité du site Web que vous êtes gentiment en train de pomper sans leur avoir demandé la permission. De plus vos requêtes consomment des ressources (côté serveur) pour être traitées. C'est autant de capacités en moins pour les services normaux (et éventuellement payant).

    De plus, c'est pas parce que vous codez en Python que le problème sera soluble avec du code Python excepté l'ajout d'un time.sleep (et encore, s'ils ont un engin capable de détecter un robot en profilant les requêtes, çà risque de ne pas suffire).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre éclairé
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 513
    Points : 700
    Points
    700
    Par défaut
    Merci de votre réponse,
    Tout d'abord, j'ai le soutient du "community manager" du jeu pour mon projet (dont je fait profiter la communauté du jeu), même si juridiquement ça ne vaut rien, éthiquement je ne me reproche rien.
    Secondement oui mes requêtes consomment des données, mais de la à dire qu'il y à un impact sur le site, c'est un peu exagéré non ?

    Bon bah dès que ne serait plus blacklisté par cloudflare je relancerait avec un time.sleep de plusieurs dizaines de secondes, je suis pas à quelques heures près.
    Je suis cependant étonné car j'avais, pour testé fait des boucles infinis de request sur 1mn, et aucun problème ..

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par flapili Voir le message
    Secondement oui mes requêtes consomment des données, mais de la à dire qu'il y à un impact sur le site, c'est un peu exagéré non ?
    Vous êtes vous un peu documenté sur ce que vous devez faire ou pas avant de coder un robot qui pompe des informations sur le net? Incivilité, vandalisme, ... sont les termes qu'on retrouve sur Wikipedia

    Citation Envoyé par flapili Voir le message
    Je suis cependant étonné car j'avais, pour testé fait des boucles infinis de request sur 1mn, et aucun problème ..
    Tester dans sa cuisine ou sur la place publique, ce ne sont ni les mêmes contraintes ni les mêmes lois.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre éclairé
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 513
    Points : 700
    Points
    700
    Par défaut
    Bon se sujet n'avancera pas plus de toute façon ...
    J'ai quand même demandé explicitement à mon contact chez ankama via son discord perso il m'as répondu mot pour mot "t'inquiète aucun soucis, on va pas chipoter entre nous". Faut dire aussi que ça fait 2 conventions que je suis embauché en tant que intermittent par Ankama..

    Faut pas nous plus voir le mal de partout hein --'

    Bon malheureusement leur site étant en cours de restructuration pour la future maj (2.46) et la parsing ne sera plus adapté, j'a quand même eu accès à 2/3 pages de leur serveur local de dev pour adapter mon parsing.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Système anti DDOS
    Par corgato dans le forum Sécurité
    Réponses: 7
    Dernier message: 24/07/2013, 09h22
  2. Recherche bon serveur dédié , Avec filtre anti DOS / DDOS
    Par toobias dans le forum Hébergement
    Réponses: 1
    Dernier message: 07/01/2011, 13h39
  3. Anti Spam sous RedHat
    Par TuxP dans le forum Réseau
    Réponses: 3
    Dernier message: 03/02/2004, 11h26
  4. [] [Réseau] Anti-timer, anti-idle
    Par clonevince dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 15/01/2003, 22h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo