2017-01-16 2 views
0

j'ai des liens stockés dans un fichier qui ressemble à ceci:Gestion des liens web en Python

http://r14---sn-p5qlsnss.googlevideo.com/videoplayback?itag=22&id=o-AOtM1kWozUiJKP2ENWH989ZIfJaZNPVvXTrBkXx40lG5&key=yt6&ip=159.253.144.86&lmt=1480060612064057&dur=1047.870&mv=m&source=youtube&ms=au&ei=DtN8WLfwFsKb1gKXho6YDw&expire=1484597102&mn=sn-p5qlsnss&mm=31&ipbits=0&nh=IgpwcjAzLmlhZDA3KgkxMjcuMC4wLjE&initcwndbps=4717500&mt=1484575249&pl=24&signature=1ECAB2B56C30CBF760721A1A26A7E80963DB36B8.6336B2C9C41DB53C8FA1D2A037793275F57C4825&ratebypass=yes&mime=video%2Fmp4&upn=tUcEt34Qe6c&sparams=dur%2Cei%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cnh%2Cpl%2Cratebypass%2Csource%2Cupn%2Cexpire&title=600ft+UFO+Crash+Site+Discovered+On+Mars%21+11%2F23%2F16 

A la fin du lien que nous avons le titre de la vidéo. Je veux lire ce lien à partir d'un fichier et obtenir le titre de la vidéo dans un format approprié (avec ces signes '+' et '%' correctement résolus). Comment je fais ça?

Je ne peux pas utiliser raw cgi comme suggested here puisque le lien est lu à partir d'un fichier et n'est pas soumis par un formulaire. Une idée?

Répondre

2

Il est super pratique urllib.parse.parse_qs pour python 3, mais si vous utilisez python 2, vous pourriez avoir à creuser la chaîne de titre premier .

import urllib 

url = 'http://r14---sn-p5qlsnss.googlevideo.com/videoplayback?itag=22&id=o-AOtM1kWozUiJKP2ENWH989ZIfJaZNPVvXTrBkXx40lG5&key=yt6&ip=159.253.144.86&lmt=1480060612064057&dur=1047.870&mv=m&source=youtube&ms=au&ei=DtN8WLfwFsKb1gKXho6YDw&expire=1484597102&mn=sn-p5qlsnss&mm=31&ipbits=0&nh=IgpwcjAzLmlhZDA3KgkxMjcuMC4wLjE&initcwndbps=4717500&mt=1484575249&pl=24&signature=1ECAB2B56C30CBF760721A1A26A7E80963DB36B8.6336B2C9C41DB53C8FA1D2A037793275F57C4825&ratebypass=yes&mime=video%2Fmp4&upn=tUcEt34Qe6c&sparams=dur%2Cei%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cnh%2Cpl%2Cratebypass%2Csource%2Cupn%2Cexpire&title=600ft+UFO+Crash+Site+Discovered+On+Mars%21+11%2F23%2F16' 

title = url[url.rfind('&title=') + 7:] 
print urllib.unquote_plus(title) 

Note: grâce à bereal pour remarquer parse_qs est également disponible en python 2, de sorte que:

import urlparse 
print urlparse.parse_qs(url)['title'][0] 

'600ft UFO Crash Site Discovered On Mars! 11/23/16' 
+0

[ 'parse_qs'] (https://docs.python.org/2.7/library/urlparse.html#urlparse.parse_qs) est là depuis la 2.6, tout le module a changé. – bereal

+0

Je ne le savais pas, merci beaucoup !! – Shane

1

Vous pouvez utiliser urllib.parse.parse_qs et lui donner la chaîne:

In [17]: urllib.parse.parse_qs(s) 
Out[17]: 
{'dur': ['1047.870'], 
'ei': ['DtN8WLfwFsKb1gKXho6YDw'], 
'expire': ['1484597102'], 
'http://r14---sn-p5qlsnss.googlevideo.com/videoplayback?itag': ['22'], 
[.. and so on ..] 
'source': ['youtube'], 
'sparams': ['dur,ei,id,initcwndbps,ip,ipbits,itag,lmt,mime,mm,mn,ms,mv,nh,pl,ratebypass,source,upn,expire'], 
'title': ['600ft UFO Crash Site Discovered On Mars! 11/23/16'], 
'upn': ['tUcEt34Qe6c']} 

In [18]: urllib.parse.parse_qs(s)["title"][0] 
Out[18]: '600ft UFO Crash Site Discovered On Mars! 11/23/16' 
-1
import urllib 
a = "http://r14---sn-p5qlsnss.googlevideo.com/videoplayback?itag=22&id=o-AOtM1kWozUiJKP2ENWH989ZIfJaZNPVvXTrBkXx40lG5&key=yt6&ip=159.253.144.86&lmt=1480060612064057&dur=1047.870&mv=m&source=youtube&ms=au&ei=DtN8WLfwFsKb1gKXho6YDw&expire=1484597102&mn=sn-p5qlsnss&mm=31&ipbits=0&nh=IgpwcjAzLmlhZDA3KgkxMjcuMC4wLjE&initcwndbps=4717500&mt=1484575249&pl=24&signature=1ECAB2B56C30CBF760721A1A26A7E80963DB36B8.6336B2C9C41DB53C8FA1D2A037793275F57C4825&ratebypass=yes&mime=video%2Fmp4&upn=tUcEt34Qe6c&sparams=dur%2Cei%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cnh%2Cpl%2Cratebypass%2Csource%2Cupn%2Cexpire&title=600ft+UFO+Crash+Site+Discovered+On+Mars%21+11%2F23%2F16" 
b = a.split('=')[-1] 
print urllib.unquote_plus(b) 
0

utilisation urlparse.parse_qs:

try: 
    from urlparse import urlparse   # for python2 
except: 
    from urllib import parse as urlparse # for python3 

rv = urlparse.parse_qs(link) 
title = rv['title'][0] 
1

Purl peut adapter votre besoin s:

import purl 

u = purl.URL('http://r14---sn-p5qlsnss.googlevideo.com/videoplayback?itag=22&id=o-AOtM1kWozUiJKP2ENWH989ZIfJaZNPVvXTrBkXx40lG5&key=yt6&ip=159.253.144.86&lmt=1480060612064057&dur=1047.870&mv=m&source=youtube&ms=au&ei=DtN8WLfwFsKb1gKXho6YDw&expire=1484597102&mn=sn-p5qlsnss&mm=31&ipbits=0&nh=IgpwcjAzLmlhZDA3KgkxMjcuMC4wLjE&initcwndbps=4717500&mt=1484575249&pl=24&signature=1ECAB2B56C30CBF760721A1A26A7E80963DB36B8.6336B2C9C41DB53C8FA1D2A037793275F57C4825&ratebypass=yes&mime=video%2Fmp4&upn=tUcEt34Qe6c&sparams=dur%2Cei%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cnh%2Cpl%2Cratebypass%2Csource%2Cupn%2Cexpire&title=600ft+UFO+Crash+Site+Discovered+On+Mars%21+11%2F23%2F16') 
print(u.query_param('title'))