wiztricks as tu une solution?
wiztricks as tu une solution?
aaaaahhhhhhh j'ai perdu 3 dizièmes dans chaque oeil !!
désolé je n'ai pas résisté
bonsoir,
oui les phrases arrivent un peu dans le désordre mais je ne voulais pas paraître impoli.
tu as un éditeur de texte pas trop mal sur Ubuntu: gedit. Tu lances la commandes gedit dans un terminal
après tu peux installer les artilleries lourdes (eclypse+pydev, netbeans, ulipad...)
Salut,
Si les informations que vous cherchez sont remontées dans la page, vous pouvez faire comme je l'ai raconté plus haut:
- lecture de la page,
- tri des urls qui vous intéressent,
- mise en forme, affichage
Ensuite, il faut trouver la bibliothèque qui fasse le maximum de boulot afin d'avoir le moins de lignes à écrire.
Comme il falloir un peu plus que le contenu des balises "href" trouvées dans le HTML pour faire le tri et construire l'URL... Une bibliothèque sympa est mechanize - bon d'accord nous l'utilisons à minima -.
La mise en oeuvre de tout çà pour un site/url est 'straightforward':
En sortie çà donne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 #!/usr/bin/env python import os import mechanize as m #url = 'file://' + os.getcwd() + '/yahoo.html' url = 'http://fr.yahoo.com' def is_video(link): attrs = dict(link.attrs) return attrs['href'].find('video') >= 0 if 'href' in attrs else False br = m.Browser() # lecture de la page br.set_response(m.urlopen(url)) # tri des urls qui vous intéressent, links = (link for link in br.links() if is_video(link)) # mise en forme, affichage urls = [ link.url for link in links ] print '\n'.join([u for u in urls])
La fonction is_video demande sans doute à être revue pour filtrer les 2 URLs en trop.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 http://fr.video.search.yahoo.com/video http://fr.video.yahoo.com http://fr.news.yahoo.com/54/20100914/video/ven-a-c-est-du-strike-d34fe38.html http://fr.news.yahoo.com/54/20100914/video/ven-c-est-ce-qui-s-appelle-se-prendre-un-d34fe38.html http://fr.news.yahoo.com/54/20100913/video/ven-un-distributeur-automatique-bien-gnr-d34fe38.html
Le traitement de chaque site demandera l'adaptation des opérations de la séquence - is_video est une de ces opérations.
La question suivante est comment 'spécialiser' les opérations, tout en gardant la même structure dans le cas plusieurs sites.
- W
Je n’ai pas laissé tomber ce sujet, mais j’ai buté sur un problème inédit: la capture du code source de la page http://fr.yahoo.com ne capture pas ce que je capture à la main par un "clic droit/ Afficher la source"
Quand la capture d’un code source par un programme marche, cela rend les choses assez simples.
Je prends par exemple le site http://www.toppeo.com/
Avec le code suivant, j’obtiens le code source sous une forme lisible:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 import urllib url = 'http://www.toppeo.com' sock = urllib.urlopen(url) ch_source = sock.read() sock.close() lg = 50 with open('videos toppeo.txt','w') as f: f.write('\n'.join( str(n).rjust(4) + ' ' + repr(ligne[0:lg]) + ('','\n')[len(ligne)>50]+\ '\n'.join( ' '+repr(ligne[j:j+lg]) for j in xrange(lg,len(ligne),lg) ) for n,ligne in enumerate(ch_source.splitlines(1) ) ) )
Sur la page http://www.toppeo.com/ , on fait ensuite "clic droit/ Copier le raccourci" sur une video
On le colle dans un fichier texte pour voir un peu comment se présente ce lien. Par exemple:
http://www.toppeo.com/video-b-soucis-faire-12894.html
On fait un Ctrl-F pour chercher ce lien dans le code source mis en fichier. On ne le trouve pas.
Mais en cherchant /video-b-soucis-faire-12894.html , on trouve deux occurences:
En répétant l’opération sur plusieurs liens videos dans la page http://www.toppeo.com/ , on ne trouve pas de format différent.172 '\t\t\t\t\t<a href="/video-b-soucis-faire-12894.html" cl'
'ass="image"><img src="/files/thumb_98e9c7b180ab97d'
'7756cd4e19bc360a3.jpg" width="133px" height="100px'
'" alt="B\xe9yonc\xe9 a du soucis a se faire ?" /></a>\r\n'
173 '\t\t\t\t\t<h2><a href="/video-b-soucis-faire-12894.html'
'">B\xe9yonc\xe9 a du soucis a se faire ?</a></h2>\r\n'
Les liens paraissent donc tous être contenus partiellement dans des balises <a href="......html"
Il suffit alors d'écrire une RE adaptée, et hop on chope tous les liens dans un code très court. Les liens étant présents deux fois, sur ce site, un petit traitement pour n’en retenir qu’un de chaque est nécessaire.
Il suffira ensuite d’ajouter http://www.toppeo.com devant chaque portion de lien trouvée pour obtenir un lien fonctionnel.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 import re,urllib RE ='<a href="(/[^"]+)(?<=\.html)' pat = re.compile(RE) url = 'http://www.toppeo.com' sock = urllib.urlopen(url) ch_source = sock.read() sock.close() li_href = [] for ma in pat.finditer(ch_source): gr = ma.group(1) if not gr in li_href: li_href.append(gr) print '\n'.join(li_href)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 /video-un-qui-pleure-parce-que-12897.html /video-david-guetta-ren-taupe-12896.html /video-move-your-body-12895.html /video-b-soucis-faire-12894.html /video-sono-20000-watts-dans-une-voiture-12893.html /video-stationnement-serr-12892.html /video-zapping-septembre-2010-12891.html /video-policiers-frappent-homme-terre-12890.html /video-une-vache-prend-fuite-avant-son-sacrifice-12889.html /video-le-plus-petit-monde-12888.html >>>
Ça repose donc sur une analyse du code source à l’œil. Cette analyse et le codage de la détection peuvent être plus ou moins longs et pénibles. De plus, je ne sais pas comment on peut être assuré d’avoir vu tous les types de liens video dans une page et qu’aucun format nouveau n’échappera au code qu’on écrit. Je ne sais pas si tous les liens video qu'on peut trouver sur le net doievent respecter un standard minimum.
Pour cette raison, ton code est intéressant, wiztricks, car mechanize fait peut être les mêmes choses de façon plus exhaustive et fiable.
Mais je n'ai pas encore regardé de près. Quand je m’étais intéressé à mechanize, il m’avait paru compliqué et long à maîtriser, j’avais préféré apprendre les regex pour me débrouiller tout seul. Je vais essayer de le regarder.
Salut,
Lorsqu'un browser charge le contenu du document à l'URL machin, il ne se contente pas de faire http GET /machin. Qu'est ce qu'on interprête ou pas - et charge en plus - c'est compliqué et mechanize fait "mieux" que... Mais,
certains sites doivent 'bouger' via du JS et remonter des URL en exécutant du JS... Dans ce cas, il faut encore une autre artillerie.
Pour l'instant, elle n'est pas nécessaire.
Le code que j'ai posté est très "bourrin"...
De toutes façons, comme il faut construire une moulinette site par site pour savoir ce qui est ou pas une lien vers une video et l'url associée, ses 'links' contiennent des informations intéressantes sur lesquelles s'appuyer.
Ben les regex c'est bien mais pour faire la sélection, il faut du contexte et donc 'parser' le document HTML. Ce n'est pas impossible à faire, mais c'est beaucoup de boulot... pour refaire des machins déjà faits.Mais je n'ai pas encore regardé de près. Quand je m’étais intéressé à mechanize, il m’avait paru compliqué et long à maîtriser, j’avais préféré apprendre les regex pour me débrouiller tout seul. Je vais essayer de le regarder.
Après la question est de savoir s'il est "plus simple" de faire un script par "site" que d'essayer de "faire tous les sites"...
Le problème étant:
- un script par site fait environ 100 lignes,
- un script factorisé est du même ordre de grandeur, j'aimerai sensiblement "moins".
- W
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager