拆分html行以获取输出

时间:2014-02-18 18:23:57

标签: python html regex parsing

我正在尝试解析一个html文件以获取3条信息(Country,long和lat)。我能找到正确的线,但分裂它是一种痛苦。如果信息没有改变或者仍然是一个世界,我可以做到,但事实并非如此。 这是我的代码

import urllib2

req = urllib2.Request('http://www.geoiptool.com/en/?IP=81.55.99.47')
response = urllib2.urlopen(req)
the_page = response.readlines()

这将返回html页面,我将用稍后的IP文件替换硬编码的“IP = 81.55.99.47”,因此国家/地区可能会更改

以下是我开始使用的代码,该代码有效,但如果IP是美国的话,它就不起作用。

country = the_page[173]
lineof_country=country.split()
result=lineof_country[5]
con=result.split('<')
print con[0]

以下是无法使用的第173行示例:

<td align="left" class="arial_bold"><a href="http://en.wikipedia.org/wiki/united states" target="_blank"> United States</a> <img src='/flags/us.gif' alt="united states" align="absmiddle" ></td>

提前致谢

2 个答案:

答案 0 :(得分:1)

这是一个解决方案:

>( *[^>]+ *)</a>

完整的命令:

>>> import re
>>> x = re.search('> *([^>]+) *</a>', country)
>>> print x.group(1)
France

第二个例子:

>>> country2 = '<td align="left" class="arial_bold"><a href="http://en.wikipedia.org/wiki/united states" target="_blank"> United States</a> <img src="/flags/us.gif" alt="united states" align="absmiddle" ></td>'
>>> import re
>>> x = re.search('> *([^>]+) *</a>', country2)
>>> print x.group(1)
United States

此方法还会删除前导和尾随空格。

答案 1 :(得分:0)

您可以使用此正则表达式:

(?<=>)([\w ]+)(?=</a>)

工作正则表达式示例:

http://regex101.com/r/uQ0iL0

Python:

import re

str='<td align="left" class="arial_bold"><a href="http://en.wikipedia.org/wiki/united states" target="_blank"> United States</a> <img src='/flags/us.gif' alt="united states" align="absmiddle" ></td>'

str=re.match("(?<=>)([\w ]+)(?=</a>)",str)
print str.group()

输出:

 United States

注意:我对python语法并不完全熟悉,所以请原谅我,如果上面的代码不完全正确,但是你明白了..并且正则表达式的例子有效。