将Web查询转换为纯文本

时间:2016-05-11 16:07:19

标签: python forms web

过去我只是在我的程序中直接将html代码替换成文本,但是有很多。任何将Web查询转换为纯文本的python模块。

示例查询:ID=0&X=-78&Y=43&Z=&Accuracy=2671&Survey_Date=20160511+11%3A49%3A57AM&Street_Name=Main+Drive&Civic_Number=0&Tree_Species=Pine&Diameter=30&Height=5&Areas_of_Concern=No+Concern&General_Condition_of_Tree=Unknown&Notes=Test&Picture=

我将其分解为&然后把它变成这样的字典:

GIS ID : 0,    
X : -78,    
Y : 43,   
Z :   ,  
Accuracy : 2671,    
Survey_Date : '20160511+11%3A49%3A57AM',   
Street_Name : 'Main+Drive',   
Civic_Number : '0'    
Tree_Species : 'Pine',    
Diameter : 30,    
Height : 5,    
Areas_of_Concern : 'No+Concern',    
General_Condition of Tree : 'Unknown',   
Notes : 'Test',    
Picture : '',

所以这里的问题是' +' 需要是一个空格而'%3A' 需要成为':'。通常我所做的是在我的代码中添加replace('+', ' ').replace('%3A', ':'),将其转换为字典,但是还有很多其他变量,这会导致很多麻烦。

编辑: 以下是替换语句现在的时间:

.replace('%21', '!').replace('%22', '"').replace('%23', '#').replace('%24', '$').replace('%25', '%').replace('%26', '&').replace('%27', "'").replace('%28', '(').replace('%29', ')').replace('%2A', '*').replace('%2B', '+').replace('%2C', ',').replace('%2D', '-').replace('%2E', '.').replace('%2F', '/').replace('%3A', ':').replace('%3B', ';').replace('%3C', '<').replace('%3D', '=').replace('%3E', '>').replace('%3F', '?').replace('%40', '@').replace('%5B', '[').replace('%5D', ']').replace('%5E', '^').replace('%5F', '_').replace('%60', '`').replace('%7B', '{').replace('%7C', '|').replace('%7D', '}').replace('%7E', '~').replace('+', ' ').replace('"', '').replace("'", '')

1 个答案:

答案 0 :(得分:1)

使用urllib.parse模块中的相关功能而不是自定义杂技。有两个。两者都可以通过调用quote_plus函数自动处理编码。

import urllib.parse as parse
# qs = query string, say

1

parse.parse_qs(qs)
# the values are lists to account for k=v1&k=v2
{'Accuracy': ['2671'],
 'Areas_of_Concern': ['No Concern'],
 'Civic_Number': ['0'],
 'Diameter': ['30'],
 'General_Condition_of_Tree': ['Unknown'],
 'Height': ['5'],
 'ID': ['0'],
 'Notes': ['Test'],
 'Street_Name': ['Main Drive'],
 'Survey_Date': ['20160511 11:49:57AM'],
 'Tree_Species': ['Pine'],
 'X': ['-78'],
 'Y': ['43']}

2

parse.parse_qsl(qs)
# if you are sure that the keys occur only once
# do a dict() of the following output
[('ID', '0'),
 ('X', '-78'),
 ('Y', '43'),
 ('Accuracy', '2671'),
 ('Survey_Date', '20160511 11:49:57AM'),
 ('Street_Name', 'Main Drive'),
 ('Civic_Number', '0'),
 ('Tree_Species', 'Pine'),
 ('Diameter', '30'),
 ('Height', '5'),
 ('Areas_of_Concern', 'No Concern'),
 ('General_Condition_of_Tree', 'Unknown'),
 ('Notes', 'Test')]