解析HTML时遇到问题

2024-06-01 05:21:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我环顾四周,发现了一些关于如何在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">

我试了一下:

^{pr2}$

我得到错误“ValueError:dictionary update sequence element#0的长度为5;需要2”

我也试着用可变万用表.strip(“&;”)但当我试图打印变量时,它一次只能替换一个字母。在

我确信这很简单,但似乎不知道如何解析它。我基本上希望10.21、12.12、43.12、12.10与蓝色、红色、绿色、紫色相关联(按显示的顺序)

非常感谢您的帮助(如果这太简单了,我很抱歉..我一辈子都搞不懂解析这个命令):—)


Tags: 文本srccomhttp示例imgbaseexample
3条回答

方括号:

dict([kvpair.split('=') for kvpair in variableIwantToParse.split('&')])

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

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

>>> 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']}

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

^{pr2}$

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

>>> 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'}

这将得到您想要的:

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(','))

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

^{pr2}$

如果您查看它,您会看到拆分是导致问题的原因(为列表中的一个项目输入的dict值太多)。在

相关问题 更多 >