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 ![]()
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
)
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é ![]()
- 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 ![]()
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
Merci d'avance de vos réponses ![]()
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 ![]()
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
Ca oui, c'est pourquoi je me tourne ici, étant donné qu'il y'a des gens très calés dans le domaine ![]()
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. )
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
Ca oui, c'est pourquoi je me tourne ici, étant donné qu'il y'a des gens très calés dans le domaine
UML, UML, UML
Tu peux regarder la méthode Merise aussi.
j'aurais fais un truc dans le genre:

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
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 ![]()
Mais t'es sûr que t'as des souci au dela d'une requete/seconde ? ![]()
Sous python via requests (à part si je fais ça mal) j'ai aucun souci en faisant + de 1requête/seconde ![]()

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)
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 ![]()
Ç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.
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.
Nan mais le problème c'est qu'il faut mettre des délais trop longs.
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.
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.
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
Merci de vos réponses
Je vais beaucoup plus me pencher sur le sujet durant cette semaine. Merci encore à tous de votre participation ca me fait plaisir ![]()
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.
Et donc exacompta, t'as des connaissances en js ?
Fais en sorte que webedia ne tombe pas sur tes travaux ![]()
Y'en a qui ont eu des problèmes