fortunes-maker
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédenteDernière révisionLes deux révisions suivantes | ||
fortunes-maker [2016/04/08 10:07] – [Source potentielles (à explorer/aspirer)] sebsauvage | fortunes-maker [2019/11/07 13:12] – [Le programme] sebsauvage | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== fortunes-maker ====== | ====== fortunes-maker ====== | ||
- | |||
- | <note important> | ||
Sous Linux, // | Sous Linux, // | ||
Ligne 12: | Ligne 10: | ||
Mais le fichier de fortunes francophone a été mis à jour pour la dernière fois [[https:// | Mais le fichier de fortunes francophone a été mis à jour pour la dernière fois [[https:// | ||
- | Alors voici un ensemble de scripts Python qui construisent | + | J'ai décider de scraper le site // |
+ | |||
+ | ===== Nouvelle citations ===== | ||
+ | |||
+ | Voici donc un nouveau fichier | ||
+ | |||
+ | <note important> | ||
+ | |||
+ | ==== Installation ==== | ||
+ | |||
+ | |||
+ | - Récupérez le fichier: http:// | ||
+ | - Virez les citations existantes si vous le souhaitez: '' | ||
+ | - Copiez ces nouvelles citations: '' | ||
+ | - Et voilà, vous pouvez profiter des citations: '' | ||
+ | ===== Le programme ===== | ||
+ | |||
+ | Vous pouvez lancer le programme suivant pour scraper vous-même les citations sur le site, mais je vous demande, si c'est possible, d' | ||
+ | |||
+ | <hidden Cliquez pour afficher le programme> | ||
+ | <file python scraper-citation-celebre.py> | ||
+ | # | ||
+ | # coding: utf-8 | ||
+ | ''' | ||
+ | scraper-citation-celebre.py | ||
+ | Version 2019-11-07 | ||
+ | |||
+ | Récupère des citations de http:// | ||
+ | et créé un fichier compilable par fortunes (sous Linux) | ||
+ | |||
+ | Une fois ce script terminé, faire: strfile citation-celebre.com | ||
+ | Cela va créer le fichier citation-celebre.com.dat | ||
+ | et copier les deux fichiers : sudo cp citation-celebre.com* / | ||
+ | |||
+ | Ce script est interruptible à tout moment. Vous pouvez l' | ||
+ | Il reprendra là où il en était. | ||
+ | ''' | ||
+ | import lxml.html, | ||
+ | from sqlite3 import dbapi2 as sqlite | ||
+ | |||
+ | class dbdict(UserDict.DictMixin): | ||
+ | ''' | ||
+ | def __init__(self, | ||
+ | self.db_filename = " | ||
+ | if not os.path.isfile(self.db_filename): | ||
+ | self.con = sqlite.connect(self.db_filename) | ||
+ | self.con.execute(" | ||
+ | else: | ||
+ | self.con = sqlite.connect(self.db_filename) | ||
+ | def __getitem__(self, | ||
+ | row = self.con.execute(" | ||
+ | if not row: raise KeyError | ||
+ | return row[0] | ||
+ | def __setitem__(self, | ||
+ | if self.con.execute(" | ||
+ | self.con.execute(" | ||
+ | else: | ||
+ | self.con.execute(" | ||
+ | self.con.commit() | ||
+ | def __delitem__(self, | ||
+ | if self.con.execute(" | ||
+ | self.con.execute(" | ||
+ | self.con.commit() | ||
+ | else: | ||
+ | raise KeyError | ||
+ | def keys(self): | ||
+ | return [row[0] for row in self.con.execute(" | ||
+ | |||
+ | pagecache = dbdict(' | ||
+ | file = codecs.open(" | ||
+ | npage = 1 | ||
+ | |||
+ | def cleanString(s): | ||
+ | return s.replace(" | ||
+ | |||
+ | while npage < 8069: | ||
+ | url = u' | ||
+ | if url not in pagecache: | ||
+ | sys.stderr.write(" | ||
+ | page = requests.get(url) | ||
+ | pagecache[url]=page.content.decode(' | ||
+ | pagedata = pagecache[url] | ||
+ | tree = lxml.html.fromstring(pagedata) | ||
+ | citations = tree.xpath('// | ||
+ | for citation in citations: | ||
+ | # Extraction des citations de la page: | ||
+ | texte = citation.xpath(' | ||
+ | auteur = "" | ||
+ | auteurElement = citation.xpath(' | ||
+ | if auteurElement : | ||
+ | auteur = cleanString(auteurElement[0].text_content().strip()) | ||
+ | # Écriture dans le fichier. | ||
+ | if u"► Lire la suite" in texte: | ||
+ | continue | ||
+ | file.write(" | ||
+ | if len(auteur)> | ||
+ | file.write(" | ||
+ | npage += 1 | ||
+ | file.close() | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | Voir aussi: https:// | ||