2

我有一个名为 link 的字符串变量,它从远程站点返回数据。我如何在等号(令牌=)之后解析数据?例如,我想从下面的行中获取“234132421reafdfasdfsdfdsf3234423edfasfdsf”。

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

蟒蛇代码:

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
4

5 回答 5

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将保存带有您的令牌的字典以及 url 中的任何其他查询参数。

于 2015-12-01T00:48:42.477 回答
1

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

In [1]: s = "http://www.aaastreams.com/playlist.m3u8?token=234132421reafdfasdfsdfdsf3234423edfasfdsf"
In [2]: s.split('=')[1]
Out[3]: '234132421reafdfasdfsdfdsf3234423edfasfdsf'
于 2015-12-01T00:46:12.557 回答
1

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

  tokenValue = re.search('token=(.*)"', link)
  print tokenValue.group(1);
于 2015-12-01T02:11:29.123 回答
0

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

可以在此处找到对此的完整解释向下滚动到标有“组”的部分

“组由 '(', ')' 元字符标记。'(' 和 ')' 的含义与它们在数学表达式中的含义大致相同;它们将包含在其中的表达式组合在一起,并且您可以重复具有重复限定符的组,例如、+、? 或 {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 和向前匹配可以出现在多个括号(组匹配)对中的那部分表达式。这些组可以嵌套。

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

于 2015-12-01T00:44:49.990 回答
0

考虑内置的字符串方法:

str.partition(sep)

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

在您的情况下,您可以使用“=”作为分隔符(sep)。str 是其中带有“=”的长字符串。

于 2015-12-01T00:47:24.440 回答