#1301 Le 10/06/2013, à 20:15
- grim7reaper
Re : /* Topic des codeurs [8] */
bonsoir grim7reaper,
en fait sous Ubuntu ou sous Manjaro, nous récupérons la même page web.
Le souci c'est après le traitement par Beautifulsoup, j'ai malheureusement été victime de ce même soucis pour écrire recmeteo.py.
Mon eeepc est sous Manjaro, et tout fonctionnait sans artifices, mais sous Ubuntu il a fallu ruser et couper la page en deux pour pouvoir la traiter correctement, étrange
Bizarre.
Ça serait une version différente de BeautifulSoup ?
Où alors, il me semble que BeautifulSoup 4 utilises quelques lib’ en C. Ça serait ces lib’ qui diffère et donc le comportement aussi, ça en mettrait un coup à la portabilité
Je ne pense pas que ça viennent du fait que j’ai utilisé le raccourci
parser('tbody')
au lieu de
parser.find_all('tbody')
Dernière modification par grim7reaper (Le 10/06/2013, à 20:17)
Hors ligne
#1302 Le 10/06/2013, à 20:34
- Didier-T
Re : /* Topic des codeurs [8] */
À voir le message d'erreur de ljere, non, ça n'a rien à voir.
En fait pour aider ljere j'avais ajouté la commande
print(parser.prettify())
et le résultat était comment dire... spécial.
en fait le traitement de Beautifulsoup plantait au tiers de la page, du coup j'ai ajouté ce bout de code
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
comme sa Beautifulsoup avait moins de données a traiter, et ça passait. (d'ailleurs j'ai pris note de ta remarque sur les chaînes concaténées dans une boucle)
Hors ligne
#1303 Le 10/06/2013, à 20:46
- grim7reaper
Re : /* Topic des codeurs [8] */
D’autant plus bizarre que je suis moi-même sous Ubuntu (enfin Kubuntu, mais ça ne change rien à ce niveau-là).
Hors ligne
#1304 Le 10/06/2013, à 21:06
- Mindiell
Re : /* Topic des codeurs [8] */
Envoyez moi le code par mail ou MP. Je testerai sur Ubuntu 10.04
Quelle est la version de bs utilisée ?
Hors ligne
#1305 Le 10/06/2013, à 21:23
- grim7reaper
Re : /* Topic des codeurs [8] */
Moi je tourne sur la 12.10, bs4 version 4.1.0 si je ne m’abuse.
Hors ligne
#1306 Le 11/06/2013, à 05:39
- Didier-T
Re : /* Topic des codeurs [8] */
j'ai constaté ces soucis à partir de la 12.04 lts.
c'est en effet étrange que tu n'aies pas de soucis grim7reaper, tu fais tes mises à niveau système comment ?
perso c'est la BS 4.2.0-1 (sous manjaro), et la 4.1.2-1 (sous Xubuntu 13.04).
Dernière modification par Didier-T (Le 11/06/2013, à 05:40)
Hors ligne
#1307 Le 11/06/2013, à 07:01
- grim7reaper
Re : /* Topic des codeurs [8] */
j'ai constaté ces soucis à partir de la 12.04 lts.
c'est en effet étrange que tu n'aies pas de soucis grim7reaper, tu fais tes mises à niveau système comment ?
Je suis de retour sur Ubuntu depuis la 12.04 (j’y suis revenu l’été dernier), puis j’ai fait la mise à niveau sur la 12.10 via le gestionnaire de paquets en novembre ou décembre si je me souviens bien.
Hors ligne
#1308 Le 11/06/2013, à 07:20
- ljere
Re : /* Topic des codeurs [8] */
j'ai donc bs4 4.1.2 sur xubuntu 13.04 suite à la mise à niveau d'une install de12.10
j'ai donc aucun de mes scripts qui fonctionnent alors qu'il n'y avait eu aucune modification
ici le script de grim7reaper http://paste.tdct.org/index.php?6u
ici le mien http://paste.tdct.org/index.php?1b
la validité est d'une heure
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
#1309 Le 11/06/2013, à 08:05
- grim7reaper
Re : /* Topic des codeurs [8] */
Ça viendrait de la version 4.1.2 de bs4 qui serait buggé alors ?
Hors ligne
#1310 Le 11/06/2013, à 09:03
- Jules Petibidon
Re : /* Topic des codeurs [8] */
Hello,
Sinon au dela d'un bug potentiel de bs, il semblerait qu'il soit pas utile de passer par tout ce tintouin, ceci suffit à récupérer les infos souhaitées (version 2.7)
>>> import urllib, re
>>> ww = urllib.urlopen(film).read()
>>> res = re.findall('<a href="(//www[^"]+)" title="([^"]+)"', ww) #liens et titres
>>> for i in res:
... i
À moins que j'ais mal vu les infos à récupérer sur le site
Dernière modification par Jules Petibidon (Le 11/06/2013, à 09:05)
Hors ligne
#1311 Le 11/06/2013, à 09:52
- grim7reaper
Re : /* Topic des codeurs [8] */
Mouais, enfin la tu va récupérer toutes les balises a avec un attributs href et title.
C‘est un peu craignos, ça fonctionne peut-être sur la page en l‘état actuel, mais une modif’ mineure du code HTML (ajout de lien qui n’ont rien à voir) va te foutre ton script en l’air…
Hors ligne
#1312 Le 11/06/2013, à 10:40
- ljere
Re : /* Topic des codeurs [8] */
j'arrive pas à comprendre pourquoi c'est toujours plus simple en python 2.7.4 qu'en python 3.3.1
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
#1313 Le 11/06/2013, à 10:43
- grim7reaper
Re : /* Topic des codeurs [8] */
Bah là c’est plus un problème de bibliothèque que de version de Python (Python 2 est aussi passé à bs4).
De plus, le code de Jules Petibidon doit fonctionner sans modif’ (ou alors mineures) en Python 3. Rien de spécifique à Python 2.
De manière général, Python 2 sucks (la gestion de l‘encodage des chaîne de caractères, pitié…) et Python 3 roxxx.
Hors ligne
#1314 Le 11/06/2013, à 11:07
- Jules Petibidon
Re : /* Topic des codeurs [8] */
Mouais, enfin la tu va récupérer toutes les balises a avec un attributs href et title.
C‘est un peu craignos, ça fonctionne peut-être sur la page en l‘état actuel, mais une modif’ mineure du code HTML (ajout de lien qui n’ont rien à voir) va te foutre ton script en l’air…
Certes, mais en l'occurrence il s'agit d'un code de 3 lignes. Si il faut le réadapter dans 6 mois ça risque pas d'empecher grand monde de dormir.
On est dans le domaine du petit script qui rend service, après dans le cadre d'une appli complexe, j'dis pas
Sinon, ljere, la seule modif à priori pour py3 c'est s/urllib/urllib.request (à vérifier, j'ai pas py3)
Hors ligne
#1315 Le 11/06/2013, à 11:41
- The Uploader
Re : /* Topic des codeurs [8] */
Certes, mais en l'occurrence il s'agit d'un code de 3 lignes. Si il faut le réadapter dans 6 mois ça risque pas d'empecher grand monde de dormir.
Même pour des scripts, y'a aucune raison à pas faire mieux.
Le but est qu'ils rendent service, pas qu'ils soient à modifier tout le temps (multiplie ça par le nombre de scripts à maintenir si tu en as beaucoup, tu vas passer 6 mois à modifier tes scripts )
Bon après, chacun fait ce qu'il veut. ^^
Dernière modification par The Uploader (Le 11/06/2013, à 11:43)
- 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
#1316 Le 11/06/2013, à 12:41
- ljere
Re : /* Topic des codeurs [8] */
pour urllib.request j'avais deviné non celle qui ne passe pas c'est
res = re.findall('<a href="(//www[^"]+)" title="([^"]+)"', ww) #liens et titres
après c'est dans le but d'apprendre donc avoir un script en python3 clair et compréhensible c'est ça mon objectif
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
#1317 Le 11/06/2013, à 12:54
- grim7reaper
Re : /* Topic des codeurs [8] */
@ljere : c’est normal.
Comme je le disait hier urllib.request.urlopen renvoie une suite de bytes et non pas une chaîne de caractère (ce qui est un comportement sain, tu pourrais aussi bien télécharger une image PNG comme ça).
D’où la récupération d‘encodage + decode comme je le faisait hier. Après ça, tu as bien une chaîne unicode donc tu peux appliquer les regexp sans souci.
Hors ligne
#1318 Le 11/06/2013, à 14:39
- ljere
Re : /* Topic des codeurs [8] */
donc si on retranscris en python 3
>>> from urllib.request import urlopen
>>> serie = 'http://monsite/torrents/search/?search=french&cat=210&submit=Recherche&subcat=433&order=added&type=desc'
>>> user_agent = 'Mozilla/5.0 (X11; Linux x86_64)'
>>> headers = { 'User-Agent' : user_agent }
>>> url = urlopen(serie, timeout=10)
>>> encoding = url.headers['content-type'].split('charset=')[-1]
>>> page = url.read().decode(encoding)
>>> import re
>>> res = re.findall('<a href="(//www[^"]+)" title="([^"]+)"', page)
>>> for i in res:
... print (i)
j'ai testé ça fonctionne, merci grim7reaper
pour mon script on a trouvé ils ont retiré http:
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
#1319 Le 11/06/2013, à 14:49
- grim7reaper
Re : /* Topic des codeurs [8] */
donc si on retranscris en python 3
>>> from urllib.request import urlopen >>> serie = 'http://monsite/torrents/search/?search=french&cat=210&submit=Recherche&subcat=433&order=added&type=desc' >>> user_agent = 'Mozilla/5.0 (X11; Linux x86_64)' >>> headers = { 'User-Agent' : user_agent } >>> url = urlopen(serie, timeout=10) >>> encoding = url.headers['content-type'].split('charset=')[-1] >>> page = url.read().decode(encoding) >>> import re >>> res = re.findall('<a href="(//www[^"]+)" title="([^"]+)"', page) >>> for i in res: ... print (i)
Oui c’est bien ça, encore que je ne sais pas si le changement d’user-agent est nécessaire (on dirait que Jules Petibidon faisait sans).
j'ai testé ça fonctionne, merci grim7reaper
De rien
pour mon script on a trouvé ils ont retiré http:
Héhé, encore une preuve que le parsing de code HTML à coup de regexp ça casse très vite.
Hors ligne
#1320 Le 11/06/2013, à 15:25
- Jules Petibidon
Re : /* Topic des codeurs [8] */
ljere a écrit :donc si on retranscris en python 3
>>> from urllib.request import urlopen >>> serie = 'http://monsite/torrents/search/?search=french&cat=210&submit=Recherche&subcat=433&order=added&type=desc' >>> user_agent = 'Mozilla/5.0 (X11; Linux x86_64)' >>> headers = { 'User-Agent' : user_agent } >>> url = urlopen(serie, timeout=10) >>> encoding = url.headers['content-type'].split('charset=')[-1] >>> page = url.read().decode(encoding) >>> import re >>> res = re.findall('<a href="(//www[^"]+)" title="([^"]+)"', page) >>> for i in res: ... print (i)
Oui c’est bien ça, encore que je ne sais pas si le changement d’user-agent est nécessaire (on dirait que Jules Petibidon faisait sans).
D'autant que là, headers ne sert à rien vu qu'il n'est pas passé à urlopen(). Pour ce faire il faudrait utiliser quelque chose du style :
req = urllib.request.Request(url, headers=headers)
url = urllib.request.urlopen(req)
(Non testé)
Mais ça ne sert pas à grand chose.
ljere a écrit :pour mon script on a trouvé ils ont retiré http:
Héhé, encore une preuve que le parsing de code HTML à coup de regexp ça casse très vite.
Je dirais plus "le parsing de code HTML ça casse très vite. Quelque soit la méthode utilisée".
Dans les scripts "pastés" ce matin. Que ce passe-t-il si les gus rajoutent un tableau sur la page avant le tableau à parser, ou une colonne à leur tableau avant celle des titres ?
Vu qu'il n'y a aucune garantie quelque soit le cas, autant faire le minimum d'efforts. Oui, je suis une grosse faignasse
Hors ligne
#1321 Le 11/06/2013, à 15:39
- grim7reaper
Re : /* Topic des codeurs [8] */
grim7reaper a écrit :ljere a écrit :pour mon script on a trouvé ils ont retiré http:
Héhé, encore une preuve que le parsing de code HTML à coup de regexp ça casse très vite.
Je dirais plus "le parsing de code HTML ça casse très vite. Quelque soit la méthode utilisée".
Dans les scripts "pastés" ce matin. Que ce passe-t-il si les gus rajoutent un tableau sur la page avant le tableau à parser, ou une colonne à leur tableau avant celle des titres ?
Vu qu'il n'y a aucune garantie quelque soit le cas, autant faire le minimum d'efforts. Oui, je suis une grosse faignasse
Ouais, mais il y en a qui offrent plus de garantie que d’autres (pour un surcoût de combien ? Aller, 5-10 lignes de plus, ça va…).
Autant prendre un truc fiable qu‘un truc torché en 2-2 qui t‘obliges à déboguer toutes les semaines.
D’autant que si je mec rajoute une table, visuellement tu vas le voir (donc débogage plus aisé). Et des modifs’ qui modifie visuellement le site, c’est plus rare (car ça peut perturber les utilisateurs).
Alors que si le mec enlève les http du href ou rajoute des liens qui matche ton expression, bah c’est moins visible. Du coup, ça a plus de chance d’arriver (et ça va être plus chiant à remonter).
On vient tout juste d‘en avoir un exemple là : en 3 jours le parsing regexp à pété. La structure de la page, elle, est identique donc les solution genre BeautifulSoup ne demande aucune modif’.
Larry Wall dit que la paresse c’est l’une des trois qualités du programmeur. Oui, mais la paresse intelligente.
La paresse c‘est de faire un truc solide (qui sera peut-être à déboguer tout les 3 mois, certes : c‘est du parsing HTML et comme tu le dis, ça finit toujours par casser), plutôt qu‘un truc fait en 2-2 que tu vas déboguer toutes les 2 semaines.
Sur le coup tu gagnes 2 min c’est sûr, mais sur la durée tu vas perdre combien ? Donc au final t’auras pas été si fainéant que ça
Hors ligne
#1322 Le 11/06/2013, à 15:52
- amj
Re : /* Topic des codeurs [8] */
Salut
Regardez le pep-0020 c'est exactement ça
http://www.python.org/dev/peps/pep-0020
The Zen of Python
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
Dernière modification par amj (Le 11/06/2013, à 15:53)
Vive le logiciel libre !! Articles aléatoires sur Wikipédia sur les logiciels libre, sur linux.
Hors ligne
#1323 Le 11/06/2013, à 16:04
- Shanx
Re : /* Topic des codeurs [8] */
Salut
pour un projet (codage d’un client SIP en C), on doit utiliser Eclipse (beurk). Mais on n’arrive pas à utiliser gstreamer avec ; on ne trouve pas quelle est la librairie à ajouter pour éviter qu’Eclipse ne nous vomisse des erreurs à la pelle. Quelqu’un a une idée ?
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
#1324 Le 11/06/2013, à 16:45
- grim7reaper
Re : /* Topic des codeurs [8] */
Putain, Eclipse pour du C quoi (je me doute que c’est pas toi qui a eu l’idée)…
Sinon pkg-config est ton ami (ça fonctionne avec d’autres bibliothèques aussi).
pkg-config --libs gstreamer-1.0
Hors ligne
#1325 Le 11/06/2013, à 16:47
- Shanx
Re : /* Topic des codeurs [8] */
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.
Sinon pkg-config est ton ami (ça fonctionne avec d’autres bibliothèques aussi).
pkg-config --libs gstreamer-1.0
Merci, je teste ça demain.
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