Парсер prostopleer.com на Python

Давным давно писал для своего приложения, приложение так и не закончил, а класс парсера вот решил "отдать в опенсурс". Может кому интересно будет. Код под катом, архив можно скачать клацнув сюда.

Все претензии к качеству кода предъявлять вон той стене.

#!/usr/bin/python

# -*- coding: utf-8 -*-

import urllib, urllib2

import re

import sys

from radiolist import TOP

class ProstoPleer(object):

def __init__(self):

pass

def _parse(self, page):

raw_playlist = ""

try:

raw_playlist = re.search('<ol id="search-results".*>(.*?)</ol>', page).group()

except:

print("Наебнулся пока пытался получить список песен")

raw_soungs = []

try:

raw_soungs = re.findall("<li(.*?)>", raw_playlist)

except:

print("Наебнулся пока парсил инфу о песнях из списка")

soungs = []

for raw_soung in raw_soungs:

if (raw_soung == ""):

continue

try:

duration = re.search('duration="(.*?)"', raw_soung).group(1)

file_id = re.search('file_id="(.*?)"', raw_soung).group(1)

singer = re.search('singer="(.*?)"', raw_soung).group(1)

song = re.search('song="(.*?)"', raw_soung).group(1)

link = re.search('link="(.*?)"', raw_soung).group(1)

rate = re.search('rate="(.*?)"', raw_soung).group(1)

size = re.search('size="(.*?)"', raw_soung).group(1)

soungs.append({ "duration": duration,

"file_id": file_id,

"singer": singer,

"song": song,

"link": link,

"rate": rate,

"size": size

})

except:

print("Наебнулся пока парсил песенку: ")

print(raw_soung)

return soungs

def search(self, query):

url = "http://prostopleer.com/search?q=%s" % urllib.quote_plus(query)

page = urllib2.urlopen(url).read()

return self._parse(page)

def top(self, city, radio):

if ((city != "msk") and (city != "spb")): return []

#if radio not in TOP[city].keys(): return []

url = "http://prostopleer.com/top/%s/%s" % (city, radio)

page = urllib2.urlopen(url).read()

return self._parse(page)

def getmp3(self, file_id):

response = urllib2.urlopen("http://prostopleer.com/download/%s" % file_id)

return response.geturl()

Вот так, например, пишется простой парсер радио Максимум.

from backend import ProstoPleer

import urllib

pp = ProstoPleer()

for song in pp.top("msk", "maximum"):

print "Start: %(singer)s - %(song)s.mp3 ..." % song

urllib.urlretrieve(pp.getmp3(song["file_id"]), u"./Maximum/%(singer)s-%(song)s.mp3" % song)

print "done.\n"

А можно взять и сделать его многопоточным (никогда так не делайте, пощадите их сервера):

from backend import ProstoPleer

import urllib, os

import thread

pp = ProstoPleer()

def download(song):

print "Start: %(singer)s - %(song)s (%(rate)s).mp3 ..." % song

urllib.urlretrieve(song["file"], u"./Record/%(singer)s-%(song)s.mp3" % song)

print "... %(singer)s - %(song)s (%(rate)s).mp3 done.\n" % song

for song in pp.top("spb", "radiorecord"):

song["file"] = pp.getmp3(song["file_id"])

thread.start_new_thread(download, (song,))

Cornholio — 31.07.2010 - 01:47 [10.204.60.69] Linux
Поправь код страницы...
Надпись (ща исправится) "Комментариев: 0" намекает.. Но ты уже послал меня нах.. Так что хотя бы табуляторы исправь.
V@s3K — 31.07.2010 - 01:50 [178.49.15.6] Linux
Cornholio, ээ, чо? Янихуянепонял =\
Все ок с кодом и табуляторами.
Быть может кто-то не внял моему совету сделать Ctrl+R и обновить кеш от старых css?
Cornholio — 31.07.2010 - 01:55 [10.204.60.69] Linux
http://dl.getdropbox.com/u/1880889/45.png
Вот так. Кэш обновил, вроде. Лиса.
А про "Комментариев: 0" - это я про этсутствие оных в коде.. Но уже пох.. Я прищурился уже.
V@s3K — 31.07.2010 - 01:59 [178.49.15.6] Linux
Cornholio, говно ваша лиса. Опять выебывается. Даже IE нормально отобразил.
Зачем тебе в 20 строках кода на питоне комментарии? Они излишни, переменные и методы говорят сами за себя.
Cornholio — 31.07.2010 - 02:40 [10.204.60.69] Linux
>говно ваша лиса.
Факт.
>Зачем тебе в 20 строках кода на питоне комментарии? Они излишни, переменные и методы говорят сами за себя.
Говорю же:
>Но уже пох.. Я прищурился уже.
V@s3K — 31.07.2010 - 02:43 [178.49.15.6] Linux
Cornholio, а с каких пор ты на ней? Почему не на хроме?
Cornholio — 31.07.2010 - 02:49 [10.204.60.69] Linux
V@s3K, Не выдержал на вкладках хрома. Вернулся на любимое дерево вкладок слева (Аддон Tree Style Tab).
А вообще, чтоб тебя багрепортами напрягать, конечно же. =)
werehuman — 31.07.2010 - 12:18 [178.49.21.200] Linux
Да, и как ты посмел не впихнуть pygments в свой блог?
V@s3K — 31.07.2010 - 13:35 [178.49.15.6] Linux
werehuman, там есть какой-нибудь способ подсвечивать любой код, не указывая ручками highlight(code, PythonLexer(), HtmlFormatter())

Ну или автоопределение какое.
ReDetection — 31.07.2010 - 15:39 [85.26.225.139] Linux
>soung
так song или sound? :)
V@s3K — 31.07.2010 - 15:48 [178.49.15.6] Linux
ReDetection, а, да, я там ступил :3 Рефакторить было так лень.
ReDetection — 31.07.2010 - 23:05 [80.64.175.96] Linux
Ctrl-2 R в эклипсе, Ctrl-R в нетбинсе. но да, порой когда уже работает иногда похуй)
Руслан — 13.10.2010 - 15:14 [195.210.46.12] Linux
А нельзя ли полностью готовый выложить парсер. а то с программированием туго :(
refresh

(не заполняйте это поле)

i