Найти - Пользователи
Полная версия: Парсинг атом фида
Начало » Python для новичков » Парсинг атом фида
1 2
Kane
Привет, расковыриваю фид рутрекера. По доке начудил такое (3.2.3):
import xml.dom.minidom
dom = xml.dom.minidom.parse('feed1.xml')
rel = []
for release in dom.getElementsByTagName('title'):
	title = release.toxml()
	title = title.replace('<title type="html"><![CDATA', '')
	title = title.replace('></title>', '')
	rel.append(title)
for x in rel:
	print(x, '\n')

Таким макаром получаю из фида заголовки раздач, например:
[Помни / Память / Мементо / Memento (Кристофер Нолан /Christopher Nolan) [2000, США, Триллер, криминал, детектив, BDRip 1080p] [10th Anniversary Special Edition] Dub+MVO+DVO+AVO+Ukr+Orig(Eng)+Sub(Rus,Eng) [21.78 GB]]] 

[Цыплёнок с черносливом / Poulet aux prunes / Chicken with plums (Венсан Паронно / Vincent Paronnaud, Маржан Сатрапи / Marjane Satrapi) [2011, Франция, Германия, Бельгия, драма, BDRip 1080p] Sub (rus, fre (forced)) + original (fre) [6.56 GB]]]

[Застрял в тебе / Stuck on You (Бобби Фаррелли, Питер Фаррелли / Bobby Farrelly, Peter Farrelly) [2003 г., США, комедия, драма, HDTV 1080i] DUB + DVO + original eng + sub rus, eng [9.6 GB]]]

Собственно теперь хотелось бы разобрать эти заголовки, например выдернуть названия, режиссёра, размер, и т.д.
Правила создания раздач довольно строгие, поэтому для себя вижу банальный вариант - пробежаться циклом по каждому символу, нужные куда-нибудь записать, и сделать срез от, например, [ до (
В общем, прошу дать наводку, куда копать.

ps Пытаюсь читать талмуд Фридла по регуляркам, но как-то туго пока понимание приходит.
dehun
ненадо циклом по каждому символу.
попробуй таки разобратся с регулярками - сушествено упрошяет жизнь с парсингом текста.

dehun
я парсил самый первый тайтл. если структура одинаковая то вроде как должно подойти и всему остальному
import re
re.search('^\[(.+?) \((.+?)\) \[(.+?)\] \[(.+?) \[(.+?)\]', text).group(5)
в последнем методе group попробуй поменять циферки - там разные части.
Kane
Попробовал, регулярка работает, с циферками понял что к чему. Осилил четверть книжки, условно сообразил, что и как она делает. Правда результат мне нужен чуть точнее, но тут я уже разберусь.
Спасибо за помощь!
fata1ex
Фридл написал свой талмуд немного под другой случай. Он там как бы даёт более_глубокое_понимание_регулярных_выражний. А для решение обычной задачи отлично подходит документация к модулю re в пару страниц. Советую Фридла читать для удовольствия и общего развития, а для решения задач просто посматривать в доки.
Kane
fata1ex, у меня после прочтения доки понимания, куда там коней запрягают не появилось, к сожалению.

fata1ex
Он там как бы даёт более_глубокое_понимание_регулярных_выражний.
А вместе с тем начинает с малого и всё объясняет на примерах. Очень приятно

fata1ex
Советую Фридла читать для удовольствия и общего развития
Кстати, получается что так и делаю. Пишет он очень грамотно и интересно (сужу по переводу изд-ва символ), можно читать как худ. лит. перед сном
fata1ex
Ну чтож, каждому своё :) Хуже от прочтения хорошей книги точно не станет. Удачи в освоении.
Kane
Спасибо.
И вопрос вдогонку: в регулярки умеют что-то типа условий?
Например в начале заголовка в квадратных скобках может быть доп.информация, вот если есть, то его выкинуть. Regexp`ом такое реально описать?


Насколько я разобрался, просто проверить наличие в начале чего-нибудь в кв. скобках можно так:
Пример куска заголовка:
[[Обновлено] Воин / Warrior (Гэвин О’Коннор / Gavin O&#039;Connor)
re.search('^\[\[(.+?)\]', x)
Проверяется наличие открывающей квадратной скобки (закрывается она в самом конце заголовка), за ней ещё одна ‘[’, а потом она закрывается. А внутри куча возможно существующих символов.
Такая проверка кажется тоже подходит:
re.search('^\[\[', x)
Или например, в середине заголовка тоже в квадратных скобках может быть информация об издании (как в оп посте, в первом примере; режиссёрская версия, театральная и т.п.)
re.search('\].+?\[(.+?).+?\[', y)
reclosedev
С помощью регулярок Python'a почти невозможно парсить вложенные структуры:
google://python regex nested
fata1ex
Не очень понятно в чем вопрос, если вы сами на него ответили.
Например в начале заголовка в квадратных скобках может быть доп.информация, вот если есть, то его выкинуть.
Выкинуть заголовок или информацию? Если заголовок, то вы вроде сами написали - ищем подходящее вхождение, если находим, значит он нам не подходит. Если нужно выкинуть информацию, то просто пропускаем её или считываем, но не используем, например, так:
>>> m = re.search('\[.*?\] (?P<num>\d*)', '[ bla bla ] 12345')
>>> m.group('num')
'12345'
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB