CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Comment structurer ma BDD ?

Exacompta
Exacompta
Niveau 10
27 octobre 2017 à 19:17:31

Bonjour tout le monde, je souhaite commencer à faire du scraping sur les forums de jeuxvideo.com. Le but est de récupérer tous les messages postés (pour l'instant sur un forum assez actif) sur chaque topic.

Du coup, j'ai imaginé une manière de stocker tout ça qui serait de cette manière :d)

Une table avec le nom d'utilisateur qui contiendrait :
- ID du post (se trouve en cliquant sur l'heure du post, il y'a une URL unique, je prendrai donc seulement le nombre)
- Datetime (est dans le post donc juste à parser)
- Contenu
- Nom du topic
- ID du topic (alors là je sais pas comment m'y prendre soit je prends l'URL, soit je prends ID du 1er post)
- Est-il l'auteur du topic ?
- Forum (normal si je scan plusieurs forums :hap:)

Donc mes questions sont :
- Est-ce une bonne manière de faire ma BDD ? C'est le seul modèle à peu près viable que j'ai trouvé :hap:
- Quel type de BDD je devrai prendre ? PostgreSQL, MongoDB, MySQL ou autre ?

Je n'ai jamais vraiment étudié la conception d'une bdd auparavant donc veuillez pardonner mes erreurs qui pourraient en irriter certains :noel:

Ah et le langage utilisé sera sûrement Python, je n'ai jamais fait de projets d'une telle "envergure" si vous avez n'importe quel(s) tip(s) ditent le moi :o))

Merci d'avance de vos réponses :-)

Message édité le 27 octobre 2017 à 19:22:16 par Exacompta
whiteapplex
whiteapplex
Niveau 21
27 octobre 2017 à 20:19:08

Si tu n'as jamais fais de BDD, je te recommande de commencer par des choses simples. MySQL peut être choisi pour des projets simples (PostgreSQL c'est surtout pour des problématiques de très grosses BDD, et MongoDB je suis pas du tout un expert)

Cela dit tu n'es pas du tout obligé de passer par un système de ce genre, tu peux utiliser des structures existantes et faire ta BDD dans des fichiers XML, il faut voir le traitement que tu souhaites effectuer sur tes données

Mais un truc important, réfléchis bien et longtemps aux données que tu veux récupérer. Une conception ça ne se fait pas en 3secondes :ok:

Message édité le 27 octobre 2017 à 20:19:54 par whiteapplex
Exacompta
Exacompta
Niveau 10
28 octobre 2017 à 01:25:47

Le 27 octobre 2017 à 20:19:08 whiteapplex a écrit :
Si tu n'as jamais fais de BDD, je te recommande de commencer par des choses simples. MySQL peut être choisi pour des projets simples (PostgreSQL c'est surtout pour des problématiques de très grosses BDD, et MongoDB je suis pas du tout un expert)

Ca me dérangerait pas d'utiliser MySQL mais étant donné que la BDD pourrait assez vite être conséquente est-ce un choix judicieux ?

Cela dit tu n'es pas du tout obligé de passer par un système de ce genre, tu peux utiliser des structures existantes et faire ta BDD dans des fichiers XML, il faut voir le traitement que tu souhaites effectuer sur tes données

En gros tu voudrai que je fasse ça par des fichiers sans passer par une sgbd ? Si j'ai beaucoup de données ca ne risque pas d'être assez lourd ?

Le but des données est de 1) d'avoir un historique des différents messages postés; 2) de pouvoir avoir une idée des sujets abordés; 3) pourquoi pas faire des stats.

Mais un truc important, réfléchis bien et longtemps aux données que tu veux récupérer. Une conception ça ne se fait pas en 3secondes :ok:

Ca oui, c'est pourquoi je me tourne ici, étant donné qu'il y'a des gens très calés dans le domaine :noel:

darkdark
darkdark
Niveau 9
28 octobre 2017 à 03:25:20

J'aurais séparé les informations concernant les utilisateurs, les topics, et les messages en 3 tables distincts. Quelque choses du genre :

Table user :
- ID
- Name

Table topic :
- ID
- Titre
- ID_premierMessage

Table messages :
- ID
- Time
- Contenu
- ID_user (l'auteur)
- ID_topic (le topic auquel il appartient)

L'idée, c'est d'éviter de répété la même information plusieurs fois, comme le titre d'un topic, pour chaque message. (Imagine un topic à 1000 réponses, tu aurais 1000 fois la même String pour le titre. )

whiteapplex
whiteapplex
Niveau 21
28 octobre 2017 à 09:53:31

Le 28 octobre 2017 à 01:25:47 Exacompta a écrit :

Le 27 octobre 2017 à 20:19:08 whiteapplex a écrit :
Si tu n'as jamais fais de BDD, je te recommande de commencer par des choses simples. MySQL peut être choisi pour des projets simples (PostgreSQL c'est surtout pour des problématiques de très grosses BDD, et MongoDB je suis pas du tout un expert)

Ca me dérangerait pas d'utiliser MySQL mais étant donné que la BDD pourrait assez vite être conséquente est-ce un choix judicieux ?

Non je pense pas. Après à toi de faire les calculs mais j'avais cru voir que PostgreSql était intéressant quand tu avais plusieurs tera-octet.

Cela dit tu n'es pas du tout obligé de passer par un système de ce genre, tu peux utiliser des structures existantes et faire ta BDD dans des fichiers XML, il faut voir le traitement que tu souhaites effectuer sur tes données

En gros tu voudrai que je fasse ça par des fichiers sans passer par une sgbd ? Si j'ai beaucoup de données ca ne risque pas d'être assez lourd ?

Le fait de passer par un seul fichier xml, ça te permet juste de stocker tes données extraites sous un format standard (qui ne dépendrait d'aucune BDD). Mais ça a plein de contrainte, l'idée une fois que tu as ce gros fichier c'est de créer des sous-fichiers qui traitent les informations du gros fichier pour que tu puisses faire des requêtes dessus. Mais une BDD te permet très bien de le faire, c'est juste une autre méthode qui peut te simplifier la vie sur certains points (une BDD ça peut être lourd sur certaines applications).

Le but des données est de 1) d'avoir un historique des différents messages postés; 2) de pouvoir avoir une idée des sujets abordés; 3) pourquoi pas faire des stats.

Oui du coup il vaut mieux éviter de passer par un seul gros fichier que tu gérerais à la main. Les BDD te fourniront des outils pour faire des stats.
Pour les sujets abordés, c'est du traitement de texte d'un certain niveau. On part plus sur du TAL (traitement automatique du langage), probablement avec utilisation de lemmes et des notions de proximité entre le sens des mots, avec du tfidf pour filtrer certaines données...
Une BDD te permet de faire ça, enfin elle te donnera juste la structure et avec un ORM tu n'auras qu'à faire tes calculs. Je sais pas si c'est utile de tout faire en BDD par contre.

Mais un truc important, réfléchis bien et longtemps aux données que tu veux récupérer. Une conception ça ne se fait pas en 3secondes :ok:

Ca oui, c'est pourquoi je me tourne ici, étant donné qu'il y'a des gens très calés dans le domaine :noel:

UML, UML, UML :ok: Tu peux regarder la méthode Merise aussi.

Message édité le 28 octobre 2017 à 09:56:11 par whiteapplex
bassem692000
bassem692000
Niveau 10
28 octobre 2017 à 11:05:54

j'aurais fais un truc dans le genre:
https://image.noelshack.com/fichiers/2017/43/6/1509181548-mcd.png

PUBG
PUBG
Niveau 10
30 octobre 2017 à 16:30:04

Donc tu veux faire un nouveau jvstats ?

Ca fait longtemps que j'ai ce projet à coeur, j'avais créer tous les scripts ainsi que la bdd mais après mûre réflexion je me dis que ce n'est pas faisable tout simple parce que jeuxvideo.com bride à partir d'un certains nombres de requêtes par seconde et que pour contourner ce bridage il ne faut pas effectuer plus d'une requête par seconde.

Et voici la structure de ma bdd :

http://prntscr.com/h3y960
http://prntscr.com/h3y99m
http://prntscr.com/h3y9e3

Message édité le 30 octobre 2017 à 16:34:17 par PUBG
Exacompta
Exacompta
Niveau 10
30 octobre 2017 à 16:50:50

Le 30 octobre 2017 à 16:30:04 PUBG a écrit :
Donc tu veux faire un nouveau jvstats ?

Ca fait longtemps que j'ai ce projet à coeur, j'avais créer tous les scripts ainsi que la bdd mais après mûre réflexion je me dis que ce n'est pas faisable tout simple parce que jeuxvideo.com bride à partir d'un certains nombres de requêtes par seconde et que pour contourner ce bridage il ne faut pas effectuer plus d'une requête par seconde.

Et voici la structure de ma bdd :

http://prntscr.com/h3y960
http://prntscr.com/h3y99m
http://prntscr.com/h3y9e3

Oui c'est ça. Merci du coup :noel:

Mais t'es sûr que t'as des souci au dela d'une requete/seconde ? :hap:
Sous python via requests (à part si je fais ça mal) j'ai aucun souci en faisant + de 1requête/seconde :(

https://image.noelshack.com/fichiers/2017/44/1/1509378816-image.png

Message édité le 30 octobre 2017 à 16:53:43 par Exacompta
PUBG
PUBG
Niveau 10
30 octobre 2017 à 17:07:05

Si je met aucune limite, au bout d'une centaine de requêtes je me fais bridé (ça passe de 0.05sec pour avoir le contenu à 2sec voir 5sec)

Exacompta
Exacompta
Niveau 10
30 octobre 2017 à 17:14:11

ah d'accord, donc tu penses que c'est pas possible techniquement à cause des limites du site ? C'est un projet qui m'aurait pris du temps donc je préfère pas perdre mon temps dans quelque chose qui sera au final irréalisable :noel:

PUBG
PUBG
Niveau 10
30 octobre 2017 à 17:16:33

Ça me semble compliqué, encore si tu veux juste des stats personnelles ça le fait mais là si tu veux parser tous les topics de tous les forums, ca te prendrait une centaine de jours (et encore).

Mais par contre est-ce que tu as des connaissances en js ? Puisque j'avais pensé à une alternative.

whiteapplex
whiteapplex
Niveau 21
30 octobre 2017 à 17:36:55

Non mais il y a des mesures de protection de base comme sur tout serveur, l'idée c'est juste de mettre un délai entre chaque requête pour pas qu'ils prennent ça pour un DDOS.
Ce sera dans tous les cas réalisable tant que tu n'exploites pas les ressources de jvc (ou de n'importe quel site d'ailleurs) de façon abusives.

Par contre oui, va pas parser tous les topics de tous les forums évidemment.

Message édité le 30 octobre 2017 à 17:38:40 par whiteapplex
PUBG
PUBG
Niveau 10
30 octobre 2017 à 17:38:19

Nan mais le problème c'est qu'il faut mettre des délais trop longs.

whiteapplex
whiteapplex
Niveau 21
30 octobre 2017 à 17:43:13

Ca veut dire quoi "trop longs" ?
Si tu mets un délai de 2 secondes, tu laisses tourner toute la nuit et t'as déjà une base pour faire des stats. Après si tu veux toutes la bdd de jvc c'est différent, évidemment qu'ils te bloquent et c'est surement pas moi qui dirais comment contourner.

PUBG
PUBG
Niveau 10
30 octobre 2017 à 18:53:54

Le 30 octobre 2017 à 17:43:13 whiteapplex a écrit :
Ca veut dire quoi "trop longs" ?
Si tu mets un délai de 2 secondes, tu laisses tourner toute la nuit et t'as déjà une base pour faire des stats. Après si tu veux toutes la bdd de jvc c'est différent, évidemment qu'ils te bloquent et c'est surement pas moi qui dirais comment contourner.

Ça fait 3 heures pour un topic de 100k posts, c'est énorme.

whiteapplex
whiteapplex
Niveau 21
30 octobre 2017 à 20:50:01

Le 30 octobre 2017 à 18:53:54 PUBG a écrit :

Le 30 octobre 2017 à 17:43:13 whiteapplex a écrit :
Ca veut dire quoi "trop longs" ?
Si tu mets un délai de 2 secondes, tu laisses tourner toute la nuit et t'as déjà une base pour faire des stats. Après si tu veux toutes la bdd de jvc c'est différent, évidemment qu'ils te bloquent et c'est surement pas moi qui dirais comment contourner.

Ça fait 3 heures pour un topic de 100k posts, c'est énorme.

Je trouve pas, mais encore une fois tout dépend de ce que tu veux faire.
10.000 posts c'est suffisants pour certaines applications que tu travailleras pendant 1semaine, pour d'autres il faut 100.000 posts en temps réels.
Pour le premier cas le scrapping marche, pour le deuxieme cas t'as plutôt intérêt à te rapprocher de jvc et webedia. Comme pour toutes les API publiques si tu veux récupérer un maximum de donnée c'est payant et c'est légitime

Exacompta
Exacompta
Niveau 10
30 octobre 2017 à 21:13:28

Merci de vos réponses :oui: Je vais beaucoup plus me pencher sur le sujet durant cette semaine. Merci encore à tous de votre participation ca me fait plaisir :noel:

PUBG
PUBG
Niveau 10
30 octobre 2017 à 21:43:49

JVC sont complètement contre ce genre de pratiques, vu qu'en 2015 ils ont fermés leur api et qu'en 2016 ils ont mit en demeure le site de redsky (stats) et on bannit les ip d'ovh.

PUBG
PUBG
Niveau 10
30 octobre 2017 à 21:44:20

Et donc exacompta, t'as des connaissances en js ?

JeRespireLeVent
JeRespireLeVent
Niveau 10
30 octobre 2017 à 21:46:38

Fais en sorte que webedia ne tombe pas sur tes travaux :hap:

Y'en a qui ont eu des problèmes

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment