2012-08-05 2 views
-1

У меня есть веб-страница, с которой я пытаюсь получить дату. Я знаю, что формат, поэтому решение должно быть столь же легко, как time.strptime(format), но проблема заключается в следующем:
If string cannot be parsed according to format, or if it has excess data after parsing, ValueError is raised.
Я пытаюсь разобрать то, что выглядит как:Python 3: Разбор даты из строки контейнера

<tr><td align="center"><b>Create time</b></td> 
</tr><tr><td align="center" bgcolor="#DDDDDD">Between August 1, 2012, 8:05 pm and August 1, 2012, 8:06 pm</td> 

соответствующий формат будет be %B %d, %Y (на самом деле не важно, в какой дате мне просто нужна дата).
Я мог бы использовать регулярное выражение (например, ([JFMASOND][a-z]{2,8}) ([0-9]{1,2}), ([0-9]{4})), чтобы получить соответствующую часть строки, но тогда я могу просто получить значения из регулярного выражения и самостоятельно выполнить необходимые преобразования. Есть ли способ использовать strptime на контейнерной строке, так сказать? Для strptime не должно быть слишком сложно просто хрустеть на строку до тех пор, пока она не получит формат соответствия ...
(Если мне это нужно сделать самому, есть ли лучший способ, чем регулярное выражение?)

+0

Прежде всего, вы используете синтаксический анализатор XML для анализа HTML-кода, правильно? – MiJyn

+1

@lkjoel: Я бы не использовал XML-синтаксический анализатор для анализа HTML. Используйте BeautifulSoup. – Blender

+0

Что такое парсинг? Мне нужна только дата на странице. – Dubslow

ответ

3

Я всегда использовал модуль parsedatetime для извлечения дат из текста. Она работает довольно хорошо:

>>> import parsedatetime as pdt 
>>> parser = pdt.Calendar(pdt.Constants()) 
>>> parser.parseDateText('Between August 1, 2012, 8:05 pm and August 1, 2012, 8:06 pm') 
daysInMonth(8, 2012) 
(2012, 8, 1, 17, 53, 18, 6, 218, 1) 
>>> 

Он принимает практически все форматы даты сокращениями для Sept. за исключением, что я отвечал на трекер ошибок, но они отказываются это исправить, так что я просто заменить Sept с Sep и это работает хорошо.

+0

Хммм ... Я полагаю, он мог бы обрабатывать все остальные харты HTML в строке? И я немного не решаюсь использовать материал нестандартной библиотеки, тем более, что он не короче, чем несколько строк регулярного выражения ... – Dubslow

+0

HTML-материал не должен быть там, в первую очередь, поэтому вам нужно очистить это как-то. Что касается анализатора, то что не так с использованием модулей нестандартной библиотеки? Он будет работать лучше, чем любое самодельное решение регулярных выражений, и будет анализировать даты для вас, независимо от формата. – Blender

+0

Вся страница - 11 строк таблиц; прохождение настройки HTMLParser было бы гораздо более суетным, чем просто передача 11 строк HTML в парсер pdt ... – Dubslow

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