首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在解析HTML时遇到问题

在解析HTML时遇到问题
EN

Stack Overflow用户
提问于 2011-03-14 16:34:40
回答 3查看 1.9K关注 0票数 1

我环顾四周,发现了一些如何在python中拆分文本的示例,但在我的示例中遇到了问题。下面是我想要解析的内容:

代码语言:javascript
复制
<img alt="" src="http://example.com/servlet/charting?base_color=grey&amp;chart_width=288&amp;chart_height=160&amp;chart_type=png&amp;chart_style=manufund_pie&amp;3DSet=true&amp;chart_size=small&amp;leg_on=left&amp;static_xvalues=10.21,12.12,43.12,12.10,&amp;static_labels=blue,red,green,purple">

这是我尝试过的:

代码语言:javascript
复制
dict(kvpair.split('=') for kvpair in variableIwantToParse.split('&'))

我得到错误"ValueError:字典更新序列元素#0具有长度5;2是必需的“

我也尝试使用variableIwantToParse.strip('&'),但当我尝试打印variableIwantToParse时,它一次只移动了一个字母。

我确信这很容易,但似乎不知道如何解析它。我基本上希望10.21,12.12,43.12,12.10与蓝色,红色,绿色,紫色(按照显示的顺序)联系在一起

非常感谢你的帮助(如果这太简单了,我很抱歉..我就是想不出解析这个的命令) :-)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-14 16:41:41

使用内置的urlparse module,不要自己做这些拆分。

代码语言:javascript
复制
>>> import urlparse
>>> url_to_parse = "http://example.com/servlet/charting?base_color=grey&amp;chart_width=288&amp;chart_height=160&amp;chart_type=png&amp;chart_style=manufund_pie&amp;3DSet=true&amp;chart_size=small&amp;leg_on=left&amp;static_xvalues=10.21,12.12,43.12,12.10,&amp;static_labels=blue,red,green,purple"
>>> parsed_url = urlparse.urlparse(url_to_parse)
>>> query_as_dict = urlparse.parse_qs(parsed_url.query)
>>> print query_as_dict
{'chart_size': ['small'], 'base_color': ['grey'], 'chart_style': ['manufund_pie'], 'chart_height': ['160'], 'static_xvalues': ['10.21,12.12,43.12,12.10,'], 'chart_width': ['288'], 'static_labels': ['blue,red,green,purple'], 'leg_on': ['left'], 'chart_type': ['png'], '3DSet': ['true']}

如果您使用的是版本低于2.6的Python,那么您必须导入cgi module。改为执行以下操作:

代码语言:javascript
复制
>>> import urlparse
>>> import cgi
>>> parsed_url = urlparse.urlparse(url_to_parse)
>>> query_as_dict = cgi.parse_qs(parsed_url.query)
>>> print query_as_dict
{'chart_size': ['small'], 'base_color': ['grey'], 'chart_style': ['manufund_pie'], 'chart_height': ['160'], 'static_xvalues': ['10.21,12.12,43.12,12.10,'], 'chart_width': ['288'], 'static_labels': ['blue,red,green,purple'], 'leg_on': ['left'], 'chart_type': ['png'], '3DSet': ['true']}

然后,要将它们与字典相关联,请在zip中使用所提供的字典构造函数。

代码语言:javascript
复制
>>> print dict(zip( query_as_dict['static_labels'][0].split(','), query_as_dict['static_xvalues'][0].split(',')))
{'blue': '10.21', 'purple': '12.10', 'green': '43.12', 'red': '12.12'}
票数 7
EN

Stack Overflow用户

发布于 2011-03-14 16:44:52

方括号:

代码语言:javascript
复制
dict([kvpair.split('=') for kvpair in variableIwantToParse.split('&')])

此外,将&替换为&可能会有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2011-03-14 16:59:42

这会让你得到你想要的:

代码语言:javascript
复制
d = dict(kv.split('=') for kv in string_to_parse.split('?')[1][:-2].split('&amp;'))
labels_and_values = zip(d['static_labels'].split(','), d['static_xvalues'].split(','))

当您遇到麻烦时,在命令提示符中对其进行分解是非常有用的。例如:

代码语言:javascript
复制
10 > for kv in s.split('&'):
...:     print kv.split('=')

如果你检查它,你会看到see on &正在引起你的问题(为列表中的一项提供太多的值)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5296336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档