这与我上一次question类似。
问题是整个脚本看起来像这样: - http://pastebin.com/1MyGGD9h
正如你可以看到' userId'元素重复。 python脚本获取第一个并忽略第二个结果。如何获取它们并分别使用它们的值。
我认为可以做的是一次获取一个元素并分别使用这些值。但是,我似乎无法让它发挥作用。
现在,为了获取脚本..我的代码如下所示: -
Import re
from bs4 import BeautifulSoup
page = """
<script type="text/javascript">
var logged = true;
var video_id = 59374;
var item_type = 'official';
var debug = false;
var baseUrl = 'http://www.example.com';
var base_url = 'http://www.example.com/';
var assetsBaseUrl = 'http://www.example.com/assets';
var apiBaseUrl = 'http://www.example.com/common';
var playersData = [{"playerId":"showsPlayer","userId":true,"solution":"flash","playlist":[{"itemId":"5090","itemAK":"Movie"}]];
</script><script type="text/javascript" >
"""
soup = BeautifulSoup(page)
pattern = re.compile(r'"userId":"(.*?)"', re.MULTILINE | re.DOTALL)
script = soup.find("script", text=pattern)
print pattern.search(script.text).group(1)
现在,它显示&#34; true&#34;。但是,我想要两个价值观。那是...... TRUE和FALSE,形成两个元素。任何想法。?
答案 0 :(得分:0)
您的问题示例中只有一个userid
,但如果有两个findall
,则应使用a,b = pattern.findall(script.text)
,搜索将在第一次匹配时停止:
html="""<script type="text/javascript">
var logged = true;
var video_id = 59374;
var item_type = 'official';
var debug = false;
var baseUrl = 'http://www.example.com';
var base_url = 'http://www.example.com/';
var assetsBaseUrl = 'http://www.example.com/assets';
var apiBaseUrl = 'http://www.example.com/common';
var playersData = [{"playerId":"showsPlayer","userId":true,"solution":"flash","userId":false ,"playlist":[{"itemId":"5090","itemAK":"Movie"}]];
</script><script type="text/javascript" >"""
pattern = re.compile(r'"userId":(.*?),')
print pattern.findall(page)
['true', 'false']
您的正则表达式似乎也不正确,没有双引号值:
import CoreGraphics
enum Line {
case Horizontal(CGFloat)
case Vertical(CGFloat)
}
let min = Line.Horizontal(0.0)
let mid = Line.Horizontal(0.5)
let max = Line.Horizontal(1.0)
func doToLine(line: Line) -> CGFloat? {
if case .Horizontal(let value) = line {
return value
}
return .None
}
doToLine(min) // prints 0
doToLine(mid) // prints 0.5
doToLine(max) // prints 1