新手,请保持温柔。
我有一个生成har文件的硒脚本,代码如下:
proxy.har # returns a HAR
for ent in proxy.har['log']['entries']:
_url = ent['request']['headers']
_response = ent['response']
#print(ent)
for item in ent['request']['headers']:
print(item)
以下是输出:
{'value': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/5 (KHTML, like Gecko) Chrome/ Safari/', 'name': 'User-Agent'}
{'value': 'application/json', 'name': 'content-type'}
{'value': '8d14747f41e552da0076374b6646b1d309763357195e2ec5b6be6da1d12dcf6801113', 'name': 'a-security-token'}
{'value': '8e9720fcead251fafd2c215443e3c6e7555667990f00bcfad70127e340048eb901113', 'name': 'ccu'}
{'value': 'isAjax:true', 'name': 'ADRUM'}
{'value': '*/*', 'name': 'Accept'}
我想过滤掉a-security令牌值和ccu值。我已经尝试过使用lambda,但是它什么都不打印,这是我的lambda代码:
filtered_item = filter(lambda d: 'ccu' in d , item)
for d in filtered_item:
print(d)
O
答案 0 :(得分:1)
首先,我认为标头具有字典列表的格式是非常差的,在进一步操作之前,我将其转换为适当的python字典。 例如:
headers = {e['name']: e['value'] for e in ent['request']['headers']}
给出:
{'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/5 (KHTML, like Gecko) Chrome/ Safari/', 'content-type': 'application/json', 'a-security-token': '8d14747f41e552da0076374b6646b1d309763357195e2ec5b6be6da1d12dcf6801113', 'ccu': '8e9720fcead251fafd2c215443e3c6e7555667990f00bcfad70127e340048eb901113', 'ADRUM': 'isAjax:true', 'Accept': '*/*'}
然后很容易从此列表中获取任何标题:
>>> headers['ccu']
'8e9720fcead251fafd2c215443e3c6e7555667990f00bcfad70127e340048eb901113'
>>> headers['a-security-token']
'8d14747f41e552da0076374b6646b1d309763357195e2ec5b6be6da1d12dcf6801113'
易于阅读和操作。
答案 1 :(得分:0)
以下列表理解应为您提供符合条件的所有values
的列表:
filtered_items = [d['value'] for d in har_list if d['name'] in ['a-security-token', 'ccu']]
但是,如果这些项目仅在列表中每个出现一次,并且您想单独获得它们,则可以使用next
方法,该方法还可以确保在数据出现时代码不会中断找不到:
a_sec_token = next((d['value'] for d in har_list if d['name'] == 'a-security-token'), None)
ccu = next((d['value'] for d in har_list if d['name'] == 'ccu'), None)
答案 2 :(得分:0)
# function that filters rows given string
def get_item(row):
string_to_compare='ccu'
if(row['name'] == string_to_compare):
return True
else:
return False
filtered_item = filter(get_item, item)
print('The filtered items are:')
for filt_item in filtered_item:
print(filt_item)