Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1326 Le 11/06/2013, à 17:50

grim7reaper

Re : /* Topic des codeurs [8] */

Shanx a écrit :
grim7reaper a écrit :

Putain, Eclipse pour du C quoi (je me doute que c’est pas toi qui a eu l’idée)…

En effet. Je pense que c’est pour qu’on utilise CVS, mais ça reste tout pourri.

facepalm.png
de pire en pire >_<
Nan, mais CVS quoi…
Ils ont pas trouvé plus vieux et obsolète ?

Hors ligne

#1327 Le 11/06/2013, à 17:55

The Uploader

Re : /* Topic des codeurs [8] */

Même les tarball c'est mieux.


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#1328 Le 11/06/2013, à 18:39

ljere

Re : /* Topic des codeurs [8] */

je voudrai savoir par quel module vous avez remplacé mechanize


ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon

Hors ligne

#1329 Le 11/06/2013, à 19:19

Rolinh

Re : /* Topic des codeurs [8] */

grim7reaper a écrit :

de pire en pire >_<

+1

Si tu as la possibilité, fuis cette boite!
Sérieusement...

Hors ligne

#1330 Le 11/06/2013, à 19:27

grim7reaper

Re : /* Topic des codeurs [8] */

ljere a écrit :

je voudrai savoir par quel module vous avez remplacé mechanize

Je n’ai jamais utilisé mechanize en Python (par contre je l’avais utilisé en Perl (à l’époque où je ne connaissais que ça comme langage de script), et en Ruby) donc je suis pas pas trop au fait de ce qui existe.
Mais apparemment, il n’y a pas de remplacement prêt hmm. Il semble bien y avoir des portages en cours, comme ici, mais c’est tout.
Il semblerait qu’il faille faire ça « à la main » (via urllib ou urllib2) du coup.
Tu veux faire quoi en fait ?

C’est vrai qu’il y a encore quelque bibliothèques dont le manque se fait sentir en Python 3 (matplotlib par exemple).
La situation s’est pas mal amélioré mais c’est la transition est pas encore terminée.



Rolinh a écrit :
grim7reaper a écrit :

de pire en pire >_<

+1

Si tu as la possibilité, fuis cette boite!
Sérieusement...

Je crois que c’est son école big_smile

Dernière modification par grim7reaper (Le 11/06/2013, à 19:32)

Hors ligne

#1331 Le 11/06/2013, à 20:10

Rolinh

Re : /* Topic des codeurs [8] */

grim7reaper a écrit :

Je crois que c’est son école big_smile

O_o
Il me semblait qu'il était en école mais ça ça ne me paraissait pas imaginable pour une école. Comment peut-on imposer un IDE? Et faire apprendre à utiliser un système de gestion de version OK mais... CVS? Sérieux? Le prof est resté croché sur les technologies qu'il utilisait quand il était sur les bancs d'école ou quoI?

Hors ligne

#1332 Le 11/06/2013, à 20:54

ljere

Re : /* Topic des codeurs [8] */

j'ai deux nouvelles idées qui nécessite une authentification
la première c'est de porter ce script en python3 /viewtopic.php?id=1089311 avec un envoie direct sur le paste du tdct
la seconde c'est d'adapter le compteur des lèves tôt qui est en python2 en python 3 pareil besoin d'authentification sur le forum


ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon

Hors ligne

#1333 Le 12/06/2013, à 00:49

Shanx

Re : /* Topic des codeurs [8] */

Rolinh a écrit :
grim7reaper a écrit :

Je crois que c’est son école big_smile

O_o
Il me semblait qu'il était en école mais ça ça ne me paraissait pas imaginable pour une école. Comment peut-on imposer un IDE? Et faire apprendre à utiliser un système de gestion de version OK mais... CVS? Sérieux? Le prof est resté croché sur les technologies qu'il utilisait quand il était sur les bancs d'école ou quoI?

Voilà…
Croyez-moi, j’en suis le premier désolé. hmm


Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#1334 Le 12/06/2013, à 02:03

lukophron

Re : /* Topic des codeurs [8] */

abo &

ljere a écrit :

j'ai deux nouvelles idées qui nécessite une authentification

ça m'intéressera aussi bientôt
je me suis rapidement penché sur requests, si tu le testes je veux bien des retours.


Le danger avec les glands est qu'ils prennent racines.
Corneille

Hors ligne

#1335 Le 12/06/2013, à 05:22

grim7reaper

Re : /* Topic des codeurs [8] */

Ha ouais requests semble pas mal du tout, et ça répond bien à vos besoins d’authentification.

Hors ligne

#1336 Le 12/06/2013, à 07:59

nesthib

Re : /* Topic des codeurs [8] */

Pour le moment les principaux bots que j'ai codés pour le forum sont en mechanize + BeautifulSoup, mais je songe à teste de nouvelles bibliothèques. Je pense utiliser requests + ??? ou Scrapy.
Si vous avez des remarques ou suggestions, ça m'intéresse aussi smile

Les principaux problèmes, AMHA, de mecanize+BS c'est l'absence de requêtes concurrentes et surtout la syntaxe à coucher dehors de BS !


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#1337 Le 12/06/2013, à 08:45

grim7reaper

Re : /* Topic des codeurs [8] */

Tiens, un revenant !

nesthib a écrit :

ou Scrapy.

http://doc.scrapy.org/en/0.16/faq.html a écrit :

Does Scrapy work with Python 3.0?

No, and there are no plans to port Scrapy to Python 3.0 yet.

Donc, pour moi, aucun intérêt.
Après pour ceux qui restent sur du vieux Python, c’est sûrement une solution viable.

nesthib a écrit :

Les principaux problèmes, AMHA, de mecanize+BS c'est l'absence de requêtes concurrentes

Tu entends quoi par requêtes concurrentes ?

nesthib a écrit :

et surtout la syntaxe à coucher dehors de BS !

Ouais, c‘est pas la joie.
Je préfère largement 鋸 (Nokogiri), mais c’est pas du Python.

Hors ligne

#1338 Le 12/06/2013, à 08:54

ljere

Re : /* Topic des codeurs [8] */

j'ai testé vite fait requests c'est vrai que ça à l'air simple

import requests
r = requests.get('http://forum.ubuntu-fr.org/login.php', auth=('user', 'pass'))
>>> r.status_code
200

on dirait que c'est good


ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon

Hors ligne

#1339 Le 12/06/2013, à 09:24

Kanor

Re : /* Topic des codeurs [8] */

ljere a écrit :

j'ai testé vite fait requests c'est vrai que ça à l'air simple

import requests
r = requests.get('http://forum.ubuntu-fr.org/login.php', auth=('user', 'pass'))
>>> r.status_code
200

on dirait que c'est good


Tu es bien optimiste, tu n'es pas identifié avec ton code.
Ta syntaxe c'est pour les site compatible avec basic identification de l'http (http://docs.python-requests.org/en/late … light=auth)
Le forum n'utilise pas cette fonctionnalité
Tu dois envoyer une requête post avec les même paramètre que tu enverrais si tu cliquais sur le bouton valider dans ton navigateur.
Je te conseil d'utiliser firebug → onglet réseau pour voir le contenu de la requête.

Sinon elle semble très sympa cette librairie.

Hors ligne

#1340 Le 12/06/2013, à 10:40

ljere

Re : /* Topic des codeurs [8] */

j'ai bien dit "on dirait" effectivement ce n'est pas good


ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon

Hors ligne

#1341 Le 12/06/2013, à 15:03

nesthib

Re : /* Topic des codeurs [8] */

grim7reaper a écrit :

Tiens, un revenant !

mais non tongue
quand j'ai le temps, le lis

grim7reaper a écrit :
http://doc.scrapy.org/en/0.16/faq.html a écrit :

Does Scrapy work with Python 3.0?

No, and there are no plans to port Scrapy to Python 3.0 yet.

Donc, pour moi, aucun intérêt.
Après pour ceux qui restent sur du vieux Python, c’est sûrement une solution viable.

Oui, je suis d'accord, mais c'est à nuancer (il dit bien « yet », comme pour mechanize d'ailleurs)

grim7reaper a écrit :
nesthib a écrit :

Les principaux problèmes, AMHA, de mecanize+BS c'est l'absence de requêtes concurrentes

Tu entends quoi par requêtes concurrentes ?

Désolé, petit abus de langage…
Faire plusieurs requêtes simultanées, ce que pour le moment je fais avec subprocess

grim7reaper a écrit :

Ouais, c‘est pas la joie.
Je préfère largement 鋸 (Nokogiri), mais c’est pas du Python.

« Donc, pour moi, aucun intérêt. » tongue (ou pas)


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#1342 Le 12/06/2013, à 15:48

grim7reaper

Re : /* Topic des codeurs [8] */

nesthib a écrit :
grim7reaper a écrit :
http://doc.scrapy.org/en/0.16/faq.html a écrit :

Does Scrapy work with Python 3.0?

No, and there are no plans to port Scrapy to Python 3.0 yet.

Donc, pour moi, aucun intérêt.
Après pour ceux qui restent sur du vieux Python, c’est sûrement une solution viable.

Oui, je suis d'accord, mais c'est à nuancer (il dit bien « yet », comme pour mechanize d'ailleurs)

Un yet de 4 an et demi quand même hmm
Mais oui, tout espoir n’est pas perdu (et puis il va bien y avoir un moment où la branche 2 va être abandonné de toutes façons).

nesthib a écrit :
grim7reaper a écrit :
nesthib a écrit :

Les principaux problèmes, AMHA, de mecanize+BS c'est l'absence de requêtes concurrentes

Tu entends quoi par requêtes concurrentes ?

Désolé, petit abus de langage…
Faire plusieurs requêtes simultanées, ce que pour le moment je fais avec subprocess

Je sais pas trop si c’est bien le boulot d’une bibliothèque de scrapping de proposer ça.
Y‘a plus d’une façon de faire ça donc c’est mieux de laisser l’utilisateur gérer ça comme il le souhaite.

nesthib a écrit :
grim7reaper a écrit :

Ouais, c‘est pas la joie.
Je préfère largement 鋸 (Nokogiri), mais c’est pas du Python.

« Donc, pour moi, aucun intérêt. » tongue (ou pas)

tongue

Hors ligne

#1343 Le 13/06/2013, à 17:45

ljere

Re : /* Topic des codeurs [8] */

bonsoir tout le monde
j'ai relu ton mail avec attention et essayé d'adapter le script vu qu'on dirait que ma version de beautifull bug

#!/usr/bin/python3
# coding: utf-8
# ========================================================================================
#
# Script de ljere
# license GPL V3 or later
#
# Description :
# Ce script permet de visualiser les séries de monsite en français que je peux télécharger
#
# ========================================================================================
# -----------------------------------------------
# Ajout de bibliothèques utiles
# -----------------------------------------------


from bs4 import BeautifulSoup
from urllib.request import urlopen
import os
import re

# téléchargement de la liste des série en français dans un fichier monsite.txt
serie="http://monsite/torrents/search/?search=french&cat=210&submit=Recherche&subcat=433&order=added&type=desc"
film="http://monsite/torrents/search/?subcat=631"

def liste(adresse,monsite):

    # je m'identifie comme un navigateur
    user_agent = 'Mozilla/5.0 (X11; Linux x86_64)'
    headers = { 'User-Agent' : user_agent }
    url = urlopen(adresse, timeout=10)

    # je crée une page temporaire pour ne garder que la partie après </tbody>
    page= url.read().decode('utf-8', 'ignore').encode('utf-8','ignore')
    fiche = open("page.html", "wb")
    fiche.write(page)
    fiche.close()
    fiche = open("page.html", "r")
    lines = fiche.readlines()
    i=0
    presoup=""
    for line in lines:
        if re.search("<tbody>", line) is not None:
            i=1
        if re.search("</tbody>", line) is not None:
            i=1
        if i==1:
            presoup=presoup+line
    fiche.close()
    os.remove("page.html")

    # je parse ce qu'il reste avec bs4
    soup = BeautifulSoup(presoup)
    rows = soup("tr")

    with open(monsite, mode='w', encoding='utf-8') as fichier:
        for row in rows:
            fichier.write(row('td')[1].a['title'] + '\n')

if __name__ == '__main__':
    liste(serie, 'monsiteserie2.txt')
    liste(film,  'monsitefilm2.txt')

je pense avoir tout bien fusionné mais pourtant j'ai cette erreur

 fichier.write(row('td')[1].a['title'] + '\n')
IndexError: list index out of range

Dernière modification par ljere (Le 13/06/2013, à 18:00)


ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon

Hors ligne

#1344 Le 13/06/2013, à 17:48

The Uploader

Re : /* Topic des codeurs [8] */

Il se plaint que la variable n'existe pas.
Soit tu la créée avant d'appeler open, soit tu spécifie un nom de fichier à la place.

Dernière modification par The Uploader (Le 13/06/2013, à 18:36)


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#1345 Le 13/06/2013, à 17:59

ljere

Re : /* Topic des codeurs [8] */

je me suis trompé d'erreur celle la j'avais trouvé, l'erreur est

 fichier.write(row('td')[1].a['title'] + '\n')
IndexError: list index out of range

ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon

Hors ligne

#1346 Le 13/06/2013, à 18:33

grim7reaper

Re : /* Topic des codeurs [8] */

Relativement simple wink
Mais c’est un peu ma faute, car c’est un truc que j’avais déjà remarqué sur ton script avant, mais vu que je l’avais réécrit autrement je ne t’avais pas signalé l’erreur.
Dans ce bout de code :

    for line in lines:
        if re.search("<tbody>", line) is not None:
            i=1
        if re.search("</tbody>", line) is not None:
            i=1
        if i==1:
            presoup=presoup+line

Tu veux extraire juste ce qu’il y a entre <tbody> et </tbody>, donc quand tu atteins </tbody> il faut mettre la variable i à 0 (pour arrêter de de récupérer le HTML).
Au passage, i gagnerais à avoir un nom plus explicite, genre extract, et être un booléen.


Bon une fois ce problème corrigé, j’ai remarqué que ton script supprimait tout ce qui n’était pas ASCII (é, è, à, ç, …)
En effet, la version actuelle de ton script considères que la page est en UTF-8, et dans tes encode/decode tu ignores les caractères qui ne sont pas de l’UTF-8 valide. Pas de bol pour toi, la page web est encodé en windows-1252 donc tu supprimes tout ce qui n’est pas ASCII.
Comme je l’avais dit deux pages plus tot, il vaut mieux récupérer l’encodage dans l’en-tête.
Voilà le script résultant :

def liste(adresse,monsite):
    url = urlopen(adresse, timeout=10)
    encoding = url.headers['content-type'].split('charset=')[-1]
    lines = url.read().decode(encoding).split('\n')
    extract = False
    presoup = []
    for line in lines:
        if re.search("<tbody>", line) is not None:
            extract = True
        if re.search("</tbody>", line) is not None:
            extract = False
        if extract:
            presoup.append(line)
    # je parse ce qu'il reste avec bs4
    soup = BeautifulSoup(''.join(presoup))
    rows = soup("tr")
    with open(monsite, mode='w', encoding='utf-8') as fichier:
        for row in rows:
            fichier.write(row('td')[1].a['title'] + '\n')

Bon tant que j’y était j’ai appliqué mes autres remarques faites précédemment, à savoir :
- le fichier temporaire page.html est totalement inutile
- il vaut mieux faire la concaténation avec une liste, puis faire un join.
- changement du user-agent inutile


Édit : au, passage pas besoin de regexp ici.

        if re.search("<tbody>", line) is not None:
            extract = True
        if re.search("</tbody>", line) is not None:
            extract = False

peut être remplacé par

        if '<tbody>' in line:
            extract = True
        if '</tbody>' in line:
            extract = False

Dernière modification par grim7reaper (Le 13/06/2013, à 18:40)

Hors ligne

#1347 Le 13/06/2013, à 19:05

ljere

Re : /* Topic des codeurs [8] */

je ne comprend toujours pas, quand tu essayes ça fonctionne pour toi?
parce que moi j'ai exactement la même erreur


ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon

Hors ligne

#1348 Le 13/06/2013, à 19:10

grim7reaper

Re : /* Topic des codeurs [8] */

Avec le script que tu avais posté, j’avais la même erreur.
Avec ce script :

#!/usr/bin/python3
# coding: utf-8
# ========================================================================================
#
# Script de ljere
# license GPL V3 or later
#
# Description :
# Ce script permet de visualiser les séries de monsite en français que je peux télécharger
#
# ========================================================================================
# -----------------------------------------------
# Ajout de bibliothèques utiles
# -----------------------------------------------


from bs4 import BeautifulSoup
from urllib.request import urlopen

# téléchargement de la liste des série en français dans un fichier monsite.txt
serie="http://monsite/torrents/search/?search=french&cat=210&submit=Recherche&subcat=433&order=added&type=desc"
film="http://monsite/torrents/search/?subcat=631"

def liste(adresse,monsite):
    url = urlopen(adresse, timeout=10)
    encoding = url.headers['content-type'].split('charset=')[-1]
    lines = url.read().decode(encoding).split('\n')
    extract = False
    presoup = []
    for line in lines:
        if '<tbody>' in line:
            extract = True
        if '</tbody>' in line:
            extract = False
        if extract:
            presoup.append(line)
    # je parse ce qu'il reste avec bs4
    soup = BeautifulSoup(''.join(presoup))
    rows = soup("tr")
    with open(monsite, mode='w', encoding='utf-8') as fichier:
        for row in rows:
            fichier.write(row('td')[1].a['title'] + '\n')

if __name__ == '__main__':
    liste(serie, 'monsiteserie2.txt')
    liste(film,  'monsitefilm2.txt')

Je n’ai pas d’erreur et le contenu semble correct.

Hors ligne

#1349 Le 13/06/2013, à 19:23

ljere

Re : /* Topic des codeurs [8] */

j'ai testé le fichier dans la console sauf qu'à la fin je met pour visualiser
print (row('td')[1].a['title'] + '\n')
et la ça fonctionne donc je recommence les dernières étapes avec fichier.write cette fois ci et pareil ça fonctionne j'en conclu que c'est l'appel à la fonction qui fait planter

bon ben je comprend vraiment plus rien sans rien changer dans le script

┌─( jerem ) - ( 3.8.0-23-generic-tuxonice ) - ( ~/script python )
└─> python3 scriptfs2.py 
Traceback (most recent call last):
  File "scriptfs2.py", line 53, in <module>
    liste(film,  "testfilm2.txt")
  File "scriptfs2.py", line 49, in liste
    fichier.write(row('td')[1].a['title'] + '\n')
IndexError: list index out of range
┌─( jerem ) - ( 3.8.0-23-generic-tuxonice ) - ( ~/script python )
└─> python3 scriptfs2.py 

ça fonctionne j'ai le même script que tu as posté juste au dessus

Dernière modification par ljere (Le 13/06/2013, à 19:29)


ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon

Hors ligne

#1350 Le 13/06/2013, à 20:42

tshirtman

Re : /* Topic des codeurs [8] */

coucou smile

Pour le scrapping, la dernière fois que j'ai fait ça, j'ai pris lxml (qui peut prendre une adresse web directement en paramettre) et c'était très bien, mieux que beautifulsoup je dirais, mais bon, ça fait des années que je n'ai pas touché ce dernier (le bot des couches tards :]). Sinon requests est extrèmement populaire, c'est vraiment une bonne lib, avec une interface bien foutus, c'est le genre qui fait "90% du besoin, avec 10% de la complexité", et c'est très bien comme ça.

Hors ligne