2014-02-18 3 views
0

Я пытаюсь разобрать html-файл для 3-х частей информации (Страна, длинный и лат). Я могу найти правильную линию, но ее расщепление - это боль. Я могу сделать это, если информация не изменится или останется одним миром, но это не так. Вот мой кодРазбиение строки html для получения результата

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 = 81.55.99.47» с файлом IP позже, поэтому страна может изменить

Вот код, с которого я начал работать, но он не работает, если 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> 

Заранее спасибо

+0

@PruthviRaj, будьте осторожны с вашими изменениями ... Я просмотрел большое количество из них сегодня, и это кажется мне *, как будто вы просто пытаетесь заработать с ними какую-то репутацию, а не на самом деле * пытаетесь помогать. Добавление тега 'Python-2' к вопросу, уже отмеченному' Python', и тот, который делает * не * упоминает 'Python-2' в любом месте, несколько сомнительно. Помните, что модераторы могут видеть * все * ваших изменений. – Sheridan

+0

@Sheridan Так я не помогаю? –

+0

Нет, нет. – Sheridan

ответ

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 

Этот подход также удаляет начальные и конечные пробелы.

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, поэтому, пожалуйста, простите меня, если приведенный выше код не совсем правильно, но вы получаете идею .. И пример регулярного выражения работает.

+0

Похоже, что мне нужно, однако, когда я запускаю python 2.7, я получаю сообщение об ошибке: AttribueError: «Объект NoneType не имеет атрибута« group ». Я могу просто быть идиотом, спасибо! – Ziconius

+0

@ Ziconius, Попробуйте 'str.group (0)', или, возможно, 'str.group (1)'. Извините, я не знаком с python, но один из них должен это сделать. – MElliott

Смежные вопросы