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 chevronn�
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    514
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 26
    Localisation : France, Sa�ne et Loire (Bourgogne)

    Informations professionnelles :
    Activit� : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 514
    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
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 770
    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 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 chevronn�
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    514
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 26
    Localisation : France, Sa�ne et Loire (Bourgogne)

    Informations professionnelles :
    Activit� : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 514
    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
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 770
    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 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 chevronn�
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    514
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 26
    Localisation : France, Sa�ne et Loire (Bourgogne)

    Informations professionnelles :
    Activit� : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 514
    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