如何使用python等号后获取值?

时间:2015-12-01 00:41:46

标签: python parsing xbmc kodi

我有一个名为link的字符串变量,它从远程站点返回数据。 如何在等号(token =)后解析数据? 例如,我想抓住" 234132421reafdfasdfsdfdsf3234423edfasfdsf"从 以下一行。

file: "http://www.aaastreams.com/playlist.m3u8?token=234132421reafdfasdfsdfdsf3234423edfasfdsf" 
});

python代码:

req = urllib2.Request('http://www.somesite.com/test.php')
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0')
response = urllib2.urlopen(req)   
link = response.read()

来自"打印链接的示例响应值;":

.......rest of response
    <script>

    jwplayer("container").setup({
    width:700,
    height:220,
    primary: "hls",
    title:"streams",
    autostart:true,

    image: "./1.jpg",
    file: "http://www.aaastreams.com/playlist.m3u8?token=234132421reafdfasdfsdfdsf3234423edfasfdsf" 
    });

    jwplayer().onError(function(){
    jwplayer().load({file:"http://www.aaa.com/jwplayer/ads.mp4",image:"http://aaa.com/2.png"});
    jwplayer().play();
    });

    </script>
.......rest of response

5 个答案:

答案 0 :(得分:2)

解析URL的更好方法是使用urlparse模块。

以下是一个例子:

from urlparse import urlparse, parse_qs

url = "http://www.aaastreams.com/playlist.m3u8?token=234132421reafdfasdfsdfdsf3234423edfasfdsf"
query = urlparse(url).query
params = parse_qs(query)

params将包含您的令牌以及网址中的任何其他查询参数的字典。

答案 1 :(得分:1)

不是进一步解析url而是假设整个字符串中只有一个等号,我建议做一些像这样的字符串操作:

In [1]: s = "http://www.aaastreams.com/playlist.m3u8?token=234132421reafdfasdfsdfdsf3234423edfasfdsf"
In [2]: s.split('=')[1]
Out[3]: '234132421reafdfasdfsdfdsf3234423edfasfdsf'

答案 2 :(得分:0)

您可以将正则表达式与捕获组一起使用。

可以找到对此的完整说明here向下滚动到标有“群组”的部分

“组由'(',')'元字符标记。'('和')'具有与数学表达式中相同的含义;它们将包含在其中的表达式组合在一起,您可以重复具有重复限定符的组的内容,例如,+,?或{m,n}。例如,(ab)将匹配零个或多个重复的ab。

>>> p = re.compile('(a(b)c)d')
>>> m = p.match('abcd')
>>> m.group(0)
'abcd'
>>> m.group(1)
'abc'
>>> m.group(2)
'b'

因此,在这种情况下,您可以使用正则表达式,如:

'^ *[a-z][A-Z] *\=(.*)$

组0是整个匹配组1,并且向前匹配可以出现在多个括号(组匹配)对中的表达式的那部分。这些组可以嵌套。

请注意,这是一种通用方法,并非特定于网址

答案 3 :(得分:0)

考虑内置的字符串方法:

str.partition(sep)

在第一次出现sep时拆分字符串,并返回包含分隔符之前的部分的3元组,分隔符本身以及分隔符之后的部分。如果找不到分隔符,则返回一个包含字符串本身的3元组,后跟两个空字符串。

在你的情况下,你可以使用&#34; =&#34;作为分隔符(sep)。 str是&#34; =&#34;的长字符串。在它。

答案 4 :(得分:0)

在尝试不同的解决方案后,我提出了解决此问题的最简单方法:

  tokenValue = re.search('token=(.*)"', link)
  print tokenValue.group(1);