')
help = 'Index format: nnnn'
class SuccubusJustice(_BasicScraper):
latestUrl = 'http://www.succubus-justice.com/Com%20main%20frame.htm'
stripUrl = 'http://www.succubus-justice.com/%s%%20frame.htm'
imageSearch = compile(r']+?>(Previous|<<', IGNORECASE)
help = 'Index format: nnn'
starter = indirectStarter('http://www.sexylosers.com/',
compile(r'SEXY LOSERS Latest SL Comic \(#\d+\)', IGNORECASE))
@classmethod
def namer(cls, imageUrl, pageUrl):
index = pageUrl.split('/')[-1].split('.')[0]
title = imageUrl.split('/')[-1].split('.')[0]
return index + '-' + title
def smackJeeves(names):
# XXX mature content can be viewed directly with:
# http://www.smackjeeves.com/mature.php?ref=
class _SJScraper(_BasicScraper):
stripUrl = property(lambda self: self.baseUrl + self.shortName)
imageSearch = compile(r']*alt="< Previous"', IGNORECASE)
help = 'Index format: nnnn (some increasing number)'
@classmethod
def namer(cls, imageUrl, pageUrl):
return pageUrl.split('/')[-2]
def makeScraper(shortName):
baseUrl = 'http://%s.smackjeeves.com/comics/' % shortName
return type('SmackJeeves_%s' % shortName,
(_SJScraper,),
dict(
name='SmackJeeves/' + shortName,
baseUrl=baseUrl,
starter=bounceStarter(baseUrl, compile(r']*alt="Next >"', IGNORECASE)))
)
return dict((name, makeScraper(name)) for name in names)
globals().update(smackJeeves([
'20galaxies',
'axe13',
'beartholomew',
'bliss',
'durian',
'heard',
'mpmcomic',
'nlmo-project',
'paranoidloyd',
'thatdreamagain',
'wowcomics',
]))
class StarCrossdDestiny(_BasicScraper):
latestUrl = 'http://www.starcrossd.net/comic.html'
stripUrl = 'http://www.starcrossd.net/archives/%s.html'
imageSearch = compile(r'')
prevSearch = compile(r']*"[^"]*"[^>]*>prev', IGNORECASE)
help = 'Index format: nnnnnnnn'
@classmethod
def namer(cls, imageUrl, pageUrl):
if imageUrl.find('ch1') == -1:
# At first all images were stored in a strips/ directory but that was changed with the introduction of book2
imageUrl = sub('(?:strips)|(?:images)','book1',imageUrl)
elif not imageUrl.find('strips') == -1:
imageUrl = imageUrl.replace('strips/','')
directory, filename = imageUrl.split('/')[-2:]
filename, extension = splitext(filename)
return directory + '-' + filename
class SGVY(_BasicScraper):
stripUrl = 'http://www.sgvy.com/Edda%s/Issue%s/Page%s.html'
imageSearch = compile(r'"comic" src="((?:\.\./)+images/sgvy/sgvy-[-\w\d]+\.\w+)"')
prevSearch = compile(r'Prev')
help = 'Index format: edda-issue-page'
starter = indirectStarter('http://www.sgvy.com/', compile(r''))
def setStrip(self, index):
self.currentUrl = self.stripUrl % tuple(map(int, index.split('-')))
class Spamusement(_BasicScraper):
stripUrl = 'http://spamusement.com/index.php/comics/view/%s'
imageSearch = compile(r'', IGNORECASE)
help = 'Index format: n (unpadded)'
starter = indirectStarter('http://spamusement.com/', prevSearch)
def snafuComics():
class _SnafuComics(_BasicScraper):
imageSearch = compile(r'Previous')
help = 'Index format: n (unpadded)'
@property
def stripUrl(self):
return self.latestUrl + 'index.php?strip_id=%s'
comics = {
'Grim': 'grim',
'KOF': 'kof',
'PowerPuffGirls': 'ppg',
'Snafu': 'www',
'Tin': 'tin',
'TW': 'tw',
'Sugar': 'sugar',
'SF': 'sf',
'Titan': 'titan',
'EA': 'ea',
'Zim': 'zim',
'Soul': 'soul',
'FT': 'ft',
'Bunnywith': 'bunnywith',
'Braindead': 'braindead',
}
url = 'http://%s.snafu-comics.com/'
return dict((name, type('SnafuComics_%s' % name,
(_SnafuComics,),
dict(name='SnafuComics/' + name,
latestUrl=url % host)))
for name, host in comics.items())
globals().update(snafuComics())
class SosiaalisestiRajoittuneet(_BasicScraper):
latestUrl = 'http://sosiaalisestirajoittuneet.fi/index_nocomment.php'
stripUrl = 'http://sosiaalisestirajoittuneet.fi/index_nocomment.php?date=%s'
imageSearch = compile(r'')
prevSearch = compile(r']+?src="http://www.strangecandy.net/images/previous_day.gif"')
help = 'Index format: yyyyddmm'
class SMBC(_BasicScraper):
latestUrl = 'http://www.smbc-comics.com/'
stripUrl = 'http://www.smbc-comics.com/index.php?db=comics&id=%s'
imageSearch = compile(r'')
prevSearch = compile(r'131,13,216,84"\n\s+href="(.+?)#comic"\n>', MULTILINE)
help = 'Index format: nnnn'
class SomethingLikeLife(_BasicScraper):
latestUrl = 'http://www.pulledpunches.com/'
stripUrl = 'http://www.pulledpunches.com/?p=%s'
imageSearch = compile(r' ')
help = 'Index format: yyyy/mm/dd/stripname'
class SexDemonBag(_BasicScraper):
latestUrl = 'http://www.sexdemonbag.com/'
stripUrl = 'http://www.sexdemonbag.com/?p=%s'
imageSearch = compile(r'')
help = 'Index format: nnn'