Разделение строки html для получения вывода

0

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

import urllib2

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

Это возвращает html-страницу, я буду заменять hardcoded '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 несколько сомнителен. Помните, что модераторы могут видеть все ваши изменения.
  • 0
    @Sheridan Шеридан Так я не помогаю?
Показать ещё 1 комментарий
Теги:
parsing

2 ответа

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 нет атрибута« группа ». Я могу быть просто идиотом, спасибо!
  • 0
    @Ziconius, попробуйте str.group(0) или, может быть, str.group(1) . Извините, я не знаком с Python, но один из них должен это сделать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню