解析HTML时遇到问题

Los*_*oul 1 html python jython

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

<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">
Run Code Online (Sandbox Code Playgroud)

这是我试过的:

dict(kvpair.split('=') for kvpair in variableIwantToParse.split('&'))
Run Code Online (Sandbox Code Playgroud)

我收到错误"ValueError:字典更新序列元素#0的长度为5;需要2"

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

我确信这很容易,但似乎无法弄清楚如何解析它.我基本上希望10.21,12.12,43.12,12.10与蓝色,红色,绿色,紫色相关联(按顺序显示)

非常感谢你的帮助(对不起,如果这太容易了......我不能为我的生活找出解析这个的命令):-)

Mah*_*der 7

使用内置的urlparse模块,不要自己做这些拆分.

>>> 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']}
Run Code Online (Sandbox Code Playgroud)

如果您使用的Python版本低于2.6,那么您必须导入cgi模块.改为:

>>> 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']}
Run Code Online (Sandbox Code Playgroud)

然后将它们与字典关联,使用提供的dict构造函数和zip.

>>> 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'}
Run Code Online (Sandbox Code Playgroud)