过去我只是在我的程序中直接将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("'", '')
答案 0 :(得分:1)
使用urllib.parse
模块中的相关功能而不是自定义杂技。有两个。两者都可以通过调用quote_plus
函数自动处理%编码。
import urllib.parse as parse
# qs = query string, say
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']}
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')]