我只是在用Python和Regex练习基本的web抓取
我想写一个函数,以string对象作为输入,返回一个字典,其中每个键都是字符串形式的日期,比如'2017-01-23'(不带引号tho);对应的每个值都是支持率,存储为浮点数。你知道吗
以下是输入对象(数据)的外观:
如您所见,每个记录(每天)用{}表示,每个关键词:价值模式后跟','
{"date":"2017-01-23","future":false,"subgroup":"All polls","approve_estimate":"45.46693",
"approve_hi":"50.88971","approve_lo":"40.04416","disapprove_estimate":"41.26452",
"disapprove_hi":"46.68729","disapprove_lo":"35.84175"},
{"date":"2017-01-24","future":false,"subgroup":"All polls"
...................
以下是日期的正则表达式模式:
date_pattern = r'\d{4}-\d{2}-\d{2}'
用这个
date_pattern = r'\d{4}-\d{2}-\d{2}'
date_matcher = re.compile(date_pattern)
date_matches = matcher.findall(long_string) #list of all dates in string
但对于实际的支持率值,这不起作用,因为我不是在寻找匹配项,而是在这个示例中,后面的数字是45.46693。你知道吗
approve_pattern = r'approve_estimate\":'
#float(re.sub('[aZ]','',re.sub('["]','',re.split(approve_pattern, data) [1])))
approve\u模式的问题是一次只能获取一个值。那么,如何对整个数据执行此操作,并将批准评级值存储为float?你知道吗
另外,我只想保留“future”:false放弃预测值的记录,并且只保留带有“future”:true的值。你知道吗
请假设所有遇到的日期都有有效的批准估计数。你知道吗
下面是所需的输出
date_matches=['2018-01-01','2018-01-02','2018-01-03'] # "future":true filtered out
approve_matches=[47.1,47.2,47.9]
final_dict = {k:v for k,v in zip(date_matches,approve_matches)}
final_dict #Desired Output {'2018-01-01': 47.1, '2018-01-02': 47.2, '2018-01-03': 47.9}
您的数据看起来非常像JSON,只是它必须用括号括起来才能形成一个数组。您应该使用JSON解析器(例如
json.loads
)来读取它。你知道吗假设
s
是您的原始字符串。然后在字典中生成以下表达式:相关问题 更多 >
编程相关推荐