Deprecate underscore-prefixed parent classes
This is trying to strike a balance between updating as much existing classes as possible, but not making the diff too big...
This commit is contained in:
parent
a640580826
commit
8e1e398a8d
65 changed files with 442 additions and 441 deletions
|
@ -8,7 +8,7 @@ from re import compile, escape, MULTILINE
|
||||||
from ..util import tagre
|
from ..util import tagre
|
||||||
from ..scraper import _BasicScraper, _ParserScraper
|
from ..scraper import _BasicScraper, _ParserScraper
|
||||||
from ..helpers import regexNamer, bounceStarter, indirectStarter
|
from ..helpers import regexNamer, bounceStarter, indirectStarter
|
||||||
from .common import _WordPressScraper, _WPNavi, _WPWebcomic
|
from .common import WordPressScraper, WordPressNavi, WordPressWebcomic
|
||||||
|
|
||||||
|
|
||||||
class AbstruseGoose(_ParserScraper):
|
class AbstruseGoose(_ParserScraper):
|
||||||
|
@ -88,7 +88,7 @@ class AdventuresOfFifne(_ParserScraper):
|
||||||
return super(AdventuresOfFifne, self).getPrevUrl(url, data)
|
return super(AdventuresOfFifne, self).getPrevUrl(url, data)
|
||||||
|
|
||||||
|
|
||||||
class AfterStrife(_WPNavi):
|
class AfterStrife(WordPressNavi):
|
||||||
baseUrl = 'http://afterstrife.com/'
|
baseUrl = 'http://afterstrife.com/'
|
||||||
stripUrl = baseUrl + '?p=%s'
|
stripUrl = baseUrl + '?p=%s'
|
||||||
url = stripUrl % '262'
|
url = stripUrl % '262'
|
||||||
|
@ -117,11 +117,11 @@ class AhoiPolloi(_ParserScraper):
|
||||||
help = 'Index format: yyyymmdd'
|
help = 'Index format: yyyymmdd'
|
||||||
|
|
||||||
|
|
||||||
class AhoyEarth(_WPNavi):
|
class AhoyEarth(WordPressNavi):
|
||||||
url = 'http://www.ahoyearth.com/'
|
url = 'http://www.ahoyearth.com/'
|
||||||
|
|
||||||
|
|
||||||
class AirForceBlues(_WordPressScraper):
|
class AirForceBlues(WordPressScraper):
|
||||||
url = 'http://farvatoons.com/'
|
url = 'http://farvatoons.com/'
|
||||||
firstStripUrl = url + 'comic/in-texas-there-are-texans/'
|
firstStripUrl = url + 'comic/in-texas-there-are-texans/'
|
||||||
|
|
||||||
|
@ -136,7 +136,7 @@ class ALessonIsLearned(_BasicScraper):
|
||||||
help = 'Index format: nnn'
|
help = 'Index format: nnn'
|
||||||
|
|
||||||
|
|
||||||
class Alice(_WordPressScraper):
|
class Alice(WordPressScraper):
|
||||||
url = 'https://web.archive.org/web/20210115132313/http://www.alicecomics.com/'
|
url = 'https://web.archive.org/web/20210115132313/http://www.alicecomics.com/'
|
||||||
latestSearch = '//a[text()="Latest Alice!"]'
|
latestSearch = '//a[text()="Latest Alice!"]'
|
||||||
starter = indirectStarter
|
starter = indirectStarter
|
||||||
|
@ -153,12 +153,12 @@ class AlienLovesPredator(_BasicScraper):
|
||||||
help = 'Index format: yyyy/mm/dd/name'
|
help = 'Index format: yyyy/mm/dd/name'
|
||||||
|
|
||||||
|
|
||||||
class AlienShores(_WordPressScraper):
|
class AlienShores(WordPressScraper):
|
||||||
url = 'http://alienshores.com/alienshores_band/'
|
url = 'http://alienshores.com/alienshores_band/'
|
||||||
firstStripUrl = url + 'AScomic/updated-cover/'
|
firstStripUrl = url + 'AScomic/updated-cover/'
|
||||||
|
|
||||||
|
|
||||||
class AllTheGrowingThings(_WordPressScraper):
|
class AllTheGrowingThings(WordPressScraper):
|
||||||
url = ('https://web.archive.org/web/20160611212229/'
|
url = ('https://web.archive.org/web/20160611212229/'
|
||||||
'http://growingthings.typodmary.com/')
|
'http://growingthings.typodmary.com/')
|
||||||
stripUrl = url + '%s/'
|
stripUrl = url + '%s/'
|
||||||
|
@ -239,7 +239,7 @@ class AmbersNoBrainers(_ParserScraper):
|
||||||
return self.stripUrl % str(pageNum - 1)
|
return self.stripUrl % str(pageNum - 1)
|
||||||
|
|
||||||
|
|
||||||
class Amya(_WordPressScraper):
|
class Amya(WordPressScraper):
|
||||||
url = 'http://www.amyachronicles.com/'
|
url = 'http://www.amyachronicles.com/'
|
||||||
|
|
||||||
|
|
||||||
|
@ -343,7 +343,7 @@ class ARedTailsDream(_BasicScraper):
|
||||||
help = 'Index format: nn'
|
help = 'Index format: nn'
|
||||||
|
|
||||||
|
|
||||||
class ArtificialIncident(_WPWebcomic):
|
class ArtificialIncident(WordPressWebcomic):
|
||||||
url = 'https://www.artificialincident.com/'
|
url = 'https://www.artificialincident.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % 'issue-one-life-changing'
|
firstStripUrl = stripUrl % 'issue-one-life-changing'
|
||||||
|
@ -370,12 +370,12 @@ class AstronomyPOTD(_ParserScraper):
|
||||||
image_url.split('/')[-1].split('.')[0])
|
image_url.split('/')[-1].split('.')[0])
|
||||||
|
|
||||||
|
|
||||||
class ATaleOfTails(_WordPressScraper):
|
class ATaleOfTails(WordPressScraper):
|
||||||
url = 'http://www.feretta.net/'
|
url = 'http://www.feretta.net/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % 'a-tale-of-tails-1-0'
|
firstStripUrl = stripUrl % 'a-tale-of-tails-1-0'
|
||||||
adult = True
|
adult = True
|
||||||
|
|
||||||
|
|
||||||
class AxeCop(_WordPressScraper):
|
class AxeCop(WordPressScraper):
|
||||||
url = 'http://axecop.com/comic/season-two/'
|
url = 'http://axecop.com/comic/season-two/'
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
||||||
# Copyright (C) 2012-2014 Bastian Kleineidam
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
# Copyright (C) 2015-2019 Tobias Gruetzmacher
|
# Copyright (C) 2015-2022 Tobias Gruetzmacher
|
||||||
from ..scraper import _ParserScraper
|
from ..scraper import ParserScraper
|
||||||
|
|
||||||
|
|
||||||
class Arcamax(_ParserScraper):
|
class Arcamax(ParserScraper):
|
||||||
imageSearch = '//img[@id="comic-zoom"]'
|
imageSearch = '//img[@id="comic-zoom"]'
|
||||||
prevSearch = '//a[@class="prev"]'
|
prevSearch = '//a[@class="prev"]'
|
||||||
|
|
||||||
def __init__(self, name, path):
|
def __init__(self, name, path):
|
||||||
super(Arcamax, self).__init__('Arcamax/' + name)
|
super().__init__('Arcamax/' + name)
|
||||||
self.url = 'http://www.arcamax.com/thefunnies/' + path + '/'
|
self.url = 'http://www.arcamax.com/thefunnies/' + path + '/'
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|
|
@ -8,10 +8,10 @@ from re import compile, escape
|
||||||
from ..util import tagre
|
from ..util import tagre
|
||||||
from ..scraper import _BasicScraper, _ParserScraper
|
from ..scraper import _BasicScraper, _ParserScraper
|
||||||
from ..helpers import indirectStarter
|
from ..helpers import indirectStarter
|
||||||
from .common import _ComicControlScraper, _WordPressScraper, _WPNavi, _WPWebcomic
|
from .common import ComicControlScraper, WordPressScraper, WordPressNavi, WordPressWebcomic
|
||||||
|
|
||||||
|
|
||||||
class BackOffice(_WPNavi):
|
class BackOffice(WordPressNavi):
|
||||||
url = 'https://rawrtacular.com/bo/'
|
url = 'https://rawrtacular.com/bo/'
|
||||||
stripUrl = url + '?comic=%s'
|
stripUrl = url + '?comic=%s'
|
||||||
firstStripUrl = stripUrl % 'back-office'
|
firstStripUrl = stripUrl % 'back-office'
|
||||||
|
@ -37,7 +37,7 @@ class BadMachinery(_ParserScraper):
|
||||||
help = 'Index format: yyyymmdd'
|
help = 'Index format: yyyymmdd'
|
||||||
|
|
||||||
|
|
||||||
class BalderDash(_ComicControlScraper):
|
class BalderDash(ComicControlScraper):
|
||||||
url = 'http://www.balderdashcomic.com/'
|
url = 'http://www.balderdashcomic.com/'
|
||||||
|
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ class BallerinaMafia(_ParserScraper):
|
||||||
endOfLife = True
|
endOfLife = True
|
||||||
|
|
||||||
|
|
||||||
class Bardsworth(_WordPressScraper):
|
class Bardsworth(WordPressScraper):
|
||||||
url = 'http://www.bardsworth.com/'
|
url = 'http://www.bardsworth.com/'
|
||||||
latestSearch = '//a[@rel="bookmark"]'
|
latestSearch = '//a[@rel="bookmark"]'
|
||||||
starter = indirectStarter
|
starter = indirectStarter
|
||||||
|
@ -68,7 +68,7 @@ class Baroquen(_BasicScraper):
|
||||||
help = 'Index format: yyyy/mm/dd/strip-name'
|
help = 'Index format: yyyy/mm/dd/strip-name'
|
||||||
|
|
||||||
|
|
||||||
class Bearmageddon(_WordPressScraper):
|
class Bearmageddon(WordPressScraper):
|
||||||
url = 'http://bearmageddon.com/bearmo/page-1/'
|
url = 'http://bearmageddon.com/bearmo/page-1/'
|
||||||
firstStripUrl = url
|
firstStripUrl = url
|
||||||
latestSearch = '//a[d:class("comic-nav-last")]'
|
latestSearch = '//a[d:class("comic-nav-last")]'
|
||||||
|
@ -98,7 +98,7 @@ class Beetlebum(_BasicScraper):
|
||||||
return name + '_' + image_url.split('/')[-1]
|
return name + '_' + image_url.split('/')[-1]
|
||||||
|
|
||||||
|
|
||||||
class Bethellium(_WPWebcomic):
|
class Bethellium(WordPressWebcomic):
|
||||||
url = 'https://bethellium.darkbluecomics.com/'
|
url = 'https://bethellium.darkbluecomics.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % 'cover'
|
firstStripUrl = stripUrl % 'cover'
|
||||||
|
@ -114,14 +114,14 @@ class BetterDays(_ParserScraper):
|
||||||
endOfLife = True
|
endOfLife = True
|
||||||
|
|
||||||
|
|
||||||
class BetweenFailures(_WPWebcomic):
|
class BetweenFailures(WordPressWebcomic):
|
||||||
url = 'https://betweenfailures.com/'
|
url = 'https://betweenfailures.com/'
|
||||||
stripUrl = url + 'comics1/%s'
|
stripUrl = url + 'comics1/%s'
|
||||||
firstStripUrl = stripUrl % 'every-story-has-to-start-somewhere'
|
firstStripUrl = stripUrl % 'every-story-has-to-start-somewhere'
|
||||||
help = 'Index format: stripname'
|
help = 'Index format: stripname'
|
||||||
|
|
||||||
|
|
||||||
class BeyondTheVeil(_WordPressScraper):
|
class BeyondTheVeil(WordPressScraper):
|
||||||
url = 'https://web.archive.org/web/20201009235642/http://beyondtheveilcomic.com/'
|
url = 'https://web.archive.org/web/20201009235642/http://beyondtheveilcomic.com/'
|
||||||
stripUrl = url + '?comic=%s'
|
stripUrl = url + '?comic=%s'
|
||||||
firstStripUrl = stripUrl % '01252010'
|
firstStripUrl = stripUrl % '01252010'
|
||||||
|
@ -154,7 +154,7 @@ class BillyTheDunce(_ParserScraper):
|
||||||
endOfLife = True
|
endOfLife = True
|
||||||
|
|
||||||
|
|
||||||
class BirdBoy(_WordPressScraper):
|
class BirdBoy(WordPressScraper):
|
||||||
url = 'https://bird-boy.com/'
|
url = 'https://bird-boy.com/'
|
||||||
stripUrl = url + 'comic/{0}-{1}/'
|
stripUrl = url + 'comic/{0}-{1}/'
|
||||||
firstStripUrl = stripUrl.format('volume-i', 'the-sword-of-mali-mani')
|
firstStripUrl = stripUrl.format('volume-i', 'the-sword-of-mali-mani')
|
||||||
|
@ -214,12 +214,12 @@ class BlondeSunrise(_ParserScraper):
|
||||||
prevSearch = '//a[img[contains(@src, "previous")]]'
|
prevSearch = '//a[img[contains(@src, "previous")]]'
|
||||||
|
|
||||||
|
|
||||||
class BloodBound(_WordPressScraper):
|
class BloodBound(WordPressScraper):
|
||||||
url = 'http://bloodboundcomic.com/'
|
url = 'http://bloodboundcomic.com/'
|
||||||
firstStripUrl = 'http://bloodboundcomic.com/comic/06112006/'
|
firstStripUrl = 'http://bloodboundcomic.com/comic/06112006/'
|
||||||
|
|
||||||
|
|
||||||
class Bloodline(_WordPressScraper):
|
class Bloodline(WordPressScraper):
|
||||||
url = 'http://w0lfmare.xepher.net/'
|
url = 'http://w0lfmare.xepher.net/'
|
||||||
stripUrl = url + 'comic/%s'
|
stripUrl = url + 'comic/%s'
|
||||||
firstStripUrl = stripUrl % 'pg-1-2'
|
firstStripUrl = stripUrl % 'pg-1-2'
|
||||||
|
@ -230,7 +230,7 @@ class Bloodline(_WordPressScraper):
|
||||||
return imageUrl.rsplit('/', 1)[-1].replace('gen-6', 'Bloodline')
|
return imageUrl.rsplit('/', 1)[-1].replace('gen-6', 'Bloodline')
|
||||||
|
|
||||||
|
|
||||||
class BloomingFaeries(_WordPressScraper):
|
class BloomingFaeries(WordPressScraper):
|
||||||
adult = True
|
adult = True
|
||||||
url = 'http://www.bloomingfaeries.com/'
|
url = 'http://www.bloomingfaeries.com/'
|
||||||
firstStripUrl = url + 'comic/public/pit-stop/'
|
firstStripUrl = url + 'comic/public/pit-stop/'
|
||||||
|
@ -255,7 +255,7 @@ class BobWhite(_ParserScraper):
|
||||||
prevSearch = '//a[@rel="previous"]'
|
prevSearch = '//a[@rel="previous"]'
|
||||||
|
|
||||||
|
|
||||||
class BookOfBiff(_WordPressScraper):
|
class BookOfBiff(WordPressScraper):
|
||||||
url = 'https://thebookofbiff.com/'
|
url = 'https://thebookofbiff.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % '4'
|
firstStripUrl = stripUrl % '4'
|
||||||
|
@ -271,18 +271,18 @@ class BoredAndEvil(_ParserScraper):
|
||||||
help = 'Index format: yyyy-mm-dd'
|
help = 'Index format: yyyy-mm-dd'
|
||||||
|
|
||||||
|
|
||||||
class BratHalla(_WordPressScraper):
|
class BratHalla(WordPressScraper):
|
||||||
url = 'http://brat-halla.com/'
|
url = 'http://brat-halla.com/'
|
||||||
|
|
||||||
|
|
||||||
class Brink(_WordPressScraper):
|
class Brink(WordPressScraper):
|
||||||
stripUrl = 'https://paperfangs.com/brink/?comic=%s'
|
stripUrl = 'https://paperfangs.com/brink/?comic=%s'
|
||||||
firstStripUrl = stripUrl % 'chapter1coversmall'
|
firstStripUrl = stripUrl % 'chapter1coversmall'
|
||||||
url = stripUrl % 'brink639small'
|
url = stripUrl % 'brink639small'
|
||||||
endOfLife = True
|
endOfLife = True
|
||||||
|
|
||||||
|
|
||||||
class Buni(_WordPressScraper):
|
class Buni(WordPressScraper):
|
||||||
url = 'http://www.bunicomic.com/'
|
url = 'http://www.bunicomic.com/'
|
||||||
|
|
||||||
|
|
||||||
|
@ -293,7 +293,7 @@ class BusinessCat(_ParserScraper):
|
||||||
endOfLife = True
|
endOfLife = True
|
||||||
|
|
||||||
|
|
||||||
class ButImACatPerson(_WordPressScraper):
|
class ButImACatPerson(WordPressScraper):
|
||||||
url = 'https://www.bicatperson.com/'
|
url = 'https://www.bicatperson.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = 'sketches-1'
|
firstStripUrl = 'sketches-1'
|
||||||
|
@ -330,7 +330,7 @@ class ButterSafe(_ParserScraper):
|
||||||
help = 'Index format: yyyy/mm/dd/stripname'
|
help = 'Index format: yyyy/mm/dd/stripname'
|
||||||
|
|
||||||
|
|
||||||
class ByTheBook(_WordPressScraper):
|
class ByTheBook(WordPressScraper):
|
||||||
url = 'http://www.btbcomic.com/'
|
url = 'http://www.btbcomic.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % 'chapter-1-page-0'
|
firstStripUrl = stripUrl % 'chapter-1-page-0'
|
||||||
|
|
|
@ -9,7 +9,7 @@ from typing import List
|
||||||
from ..scraper import _BasicScraper, _ParserScraper
|
from ..scraper import _BasicScraper, _ParserScraper
|
||||||
from ..helpers import bounceStarter, indirectStarter, joinPathPartsNamer
|
from ..helpers import bounceStarter, indirectStarter, joinPathPartsNamer
|
||||||
from ..util import tagre
|
from ..util import tagre
|
||||||
from .common import _WordPressScraper, _WPNavi, _WPWebcomic
|
from .common import WordPressScraper, WordPressNavi, WordPressWebcomic
|
||||||
|
|
||||||
|
|
||||||
class CampComic(_ParserScraper):
|
class CampComic(_ParserScraper):
|
||||||
|
@ -117,7 +117,7 @@ class CatAndGirl(_ParserScraper):
|
||||||
prevSearch = '//a[d:class("pager--prev")]'
|
prevSearch = '//a[d:class("pager--prev")]'
|
||||||
|
|
||||||
|
|
||||||
class CatenaCafe(_WordPressScraper):
|
class CatenaCafe(WordPressScraper):
|
||||||
name = 'CatenaManor/CatenaCafe'
|
name = 'CatenaManor/CatenaCafe'
|
||||||
url = 'https://catenamanor.com/'
|
url = 'https://catenamanor.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
|
@ -153,20 +153,20 @@ class CatenaManor(_ParserScraper):
|
||||||
return self.strips.pop(0)
|
return self.strips.pop(0)
|
||||||
|
|
||||||
|
|
||||||
class CatNine(_WordPressScraper):
|
class CatNine(WordPressScraper):
|
||||||
url = 'https://classic.cat-nine.net/'
|
url = 'https://classic.cat-nine.net/'
|
||||||
firstStripUrl = url + 'comic/day-first'
|
firstStripUrl = url + 'comic/day-first'
|
||||||
imageSearch = '//div[@id="comic"]//img/@data-src-img'
|
imageSearch = '//div[@id="comic"]//img/@data-src-img'
|
||||||
endOfLife = True
|
endOfLife = True
|
||||||
|
|
||||||
|
|
||||||
class CatNineTakeTwo(_WordPressScraper):
|
class CatNineTakeTwo(WordPressScraper):
|
||||||
name = 'CatNine/TakeTwo'
|
name = 'CatNine/TakeTwo'
|
||||||
url = 'https://cat-nine.net/'
|
url = 'https://cat-nine.net/'
|
||||||
firstStripUrl = url + 'comic/episode-1/1-first-day-for-everything/'
|
firstStripUrl = url + 'comic/episode-1/1-first-day-for-everything/'
|
||||||
|
|
||||||
|
|
||||||
class CatsAndCameras(_WordPressScraper):
|
class CatsAndCameras(WordPressScraper):
|
||||||
url = 'https://catsncameras.com/cnc/'
|
url = 'https://catsncameras.com/cnc/'
|
||||||
stripUrl = url + 'comic/%s'
|
stripUrl = url + 'comic/%s'
|
||||||
firstStripUrl = stripUrl % 'cnc-begins'
|
firstStripUrl = stripUrl % 'cnc-begins'
|
||||||
|
@ -181,7 +181,7 @@ class CatVersusHuman(_ParserScraper):
|
||||||
starter = indirectStarter
|
starter = indirectStarter
|
||||||
|
|
||||||
|
|
||||||
class CavesAndCritters(_WPWebcomic):
|
class CavesAndCritters(WordPressWebcomic):
|
||||||
url = 'https://cavesandcritters.com/?ao_confirm'
|
url = 'https://cavesandcritters.com/?ao_confirm'
|
||||||
stripUrl = 'https://cavesandcritters.com/cnc_webcomic/%s/'
|
stripUrl = 'https://cavesandcritters.com/cnc_webcomic/%s/'
|
||||||
firstStripUrl = stripUrl % '01_000'
|
firstStripUrl = stripUrl % '01_000'
|
||||||
|
@ -205,7 +205,7 @@ class Centralia2050(_ParserScraper):
|
||||||
return page + '.' + ext
|
return page + '.' + ext
|
||||||
|
|
||||||
|
|
||||||
class ChannelAte(_WPNavi):
|
class ChannelAte(WordPressNavi):
|
||||||
url = 'http://www.channelate.com/'
|
url = 'http://www.channelate.com/'
|
||||||
|
|
||||||
|
|
||||||
|
@ -218,7 +218,7 @@ class ChasingTheSunset(_BasicScraper):
|
||||||
help = 'Index format: n'
|
help = 'Index format: n'
|
||||||
|
|
||||||
|
|
||||||
class Chester5000XYV(_WordPressScraper):
|
class Chester5000XYV(WordPressScraper):
|
||||||
url = 'http://jessfink.com/Chester5000XYV/'
|
url = 'http://jessfink.com/Chester5000XYV/'
|
||||||
stripUrl = url + '?p=%s'
|
stripUrl = url + '?p=%s'
|
||||||
firstStripUrl = stripUrl % '34'
|
firstStripUrl = stripUrl % '34'
|
||||||
|
@ -233,7 +233,7 @@ class Chester5000XYV(_WordPressScraper):
|
||||||
return tourl
|
return tourl
|
||||||
|
|
||||||
|
|
||||||
class Chisuji(_WordPressScraper):
|
class Chisuji(WordPressScraper):
|
||||||
url = 'http://www.chisuji.com/'
|
url = 'http://www.chisuji.com/'
|
||||||
stripUrl = url + '?p=%s'
|
stripUrl = url + '?p=%s'
|
||||||
firstStripUrl = stripUrl % '266'
|
firstStripUrl = stripUrl % '266'
|
||||||
|
@ -249,7 +249,7 @@ class CigarroAndCerveja(_ParserScraper):
|
||||||
prevSearch = '//a[contains(text()," Prev")]'
|
prevSearch = '//a[contains(text()," Prev")]'
|
||||||
|
|
||||||
|
|
||||||
class ClanOfTheCats(_WordPressScraper):
|
class ClanOfTheCats(WordPressScraper):
|
||||||
url = 'http://www.cotclassic.com/'
|
url = 'http://www.cotclassic.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % 'coming-home-2'
|
firstStripUrl = stripUrl % 'coming-home-2'
|
||||||
|
@ -259,7 +259,7 @@ class ClanOfTheCats(_WordPressScraper):
|
||||||
return tourl.replace('/2954/', '/2002-06-22/')
|
return tourl.replace('/2954/', '/2002-06-22/')
|
||||||
|
|
||||||
|
|
||||||
class ClanOfTheCatsReunion(_WordPressScraper):
|
class ClanOfTheCatsReunion(WordPressScraper):
|
||||||
name = 'ClanOfTheCats/Reunion'
|
name = 'ClanOfTheCats/Reunion'
|
||||||
url = 'http://www.clanofthecats.com/'
|
url = 'http://www.clanofthecats.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
|
@ -295,7 +295,7 @@ class Comedity(_BasicScraper):
|
||||||
help = 'Index format: n (no padding)'
|
help = 'Index format: n (no padding)'
|
||||||
|
|
||||||
|
|
||||||
class CommanderKitty(_WPNavi):
|
class CommanderKitty(WordPressNavi):
|
||||||
url = 'http://www.commanderkitty.com/'
|
url = 'http://www.commanderkitty.com/'
|
||||||
stripUrl = url + '%s/'
|
stripUrl = url + '%s/'
|
||||||
firstStripUrl = stripUrl % '2009/01/03/good-to-be-back'
|
firstStripUrl = stripUrl % '2009/01/03/good-to-be-back'
|
||||||
|
@ -358,13 +358,13 @@ class CorydonCafe(_ParserScraper):
|
||||||
multipleImagesPerStrip = True
|
multipleImagesPerStrip = True
|
||||||
|
|
||||||
|
|
||||||
class CourtingDisaster(_WordPressScraper):
|
class CourtingDisaster(WordPressScraper):
|
||||||
url = 'https://web.archive.org/web/20201127150157/http://www.courting-disaster.com/'
|
url = 'https://web.archive.org/web/20201127150157/http://www.courting-disaster.com/'
|
||||||
firstStripUrl = 'http://www.courting-disaster.com/comic/courting-disaster-17/'
|
firstStripUrl = 'http://www.courting-disaster.com/comic/courting-disaster-17/'
|
||||||
endOfLife = True
|
endOfLife = True
|
||||||
|
|
||||||
|
|
||||||
class CraftedFables(_WordPressScraper):
|
class CraftedFables(WordPressScraper):
|
||||||
url = 'https://web.archive.org/web/20191126025641/http://www.caf-fiends.net/comicpress/'
|
url = 'https://web.archive.org/web/20191126025641/http://www.caf-fiends.net/comicpress/'
|
||||||
prevSearch = '//a[@rel="prev"]'
|
prevSearch = '//a[@rel="prev"]'
|
||||||
endOfLife = True
|
endOfLife = True
|
||||||
|
@ -387,7 +387,7 @@ class CrimsonFlag(_ParserScraper):
|
||||||
prevSearch = '//a[contains(@class, "prev")]'
|
prevSearch = '//a[contains(@class, "prev")]'
|
||||||
|
|
||||||
|
|
||||||
class CritterCoven(_WordPressScraper):
|
class CritterCoven(WordPressScraper):
|
||||||
url = 'http://crittercoven.com/'
|
url = 'http://crittercoven.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % 'critter-coven'
|
firstStripUrl = stripUrl % 'critter-coven'
|
||||||
|
@ -403,14 +403,14 @@ class CrossTimeCafe(_ParserScraper):
|
||||||
endOfLife = True
|
endOfLife = True
|
||||||
|
|
||||||
|
|
||||||
class CSectionComics(_WordPressScraper):
|
class CSectionComics(WordPressScraper):
|
||||||
url = 'https://www.csectioncomics.com/'
|
url = 'https://www.csectioncomics.com/'
|
||||||
firstStripUrl = url + 'comics/one-day-in-country'
|
firstStripUrl = url + 'comics/one-day-in-country'
|
||||||
namer = joinPathPartsNamer((), (-3, -2, -1))
|
namer = joinPathPartsNamer((), (-3, -2, -1))
|
||||||
multipleImagesPerStrip = True
|
multipleImagesPerStrip = True
|
||||||
|
|
||||||
|
|
||||||
class CucumberQuest(_WPWebcomic):
|
class CucumberQuest(WordPressWebcomic):
|
||||||
baseUrl = 'http://cucumber.gigidigi.com/'
|
baseUrl = 'http://cucumber.gigidigi.com/'
|
||||||
stripUrl = baseUrl + 'cq/%s/'
|
stripUrl = baseUrl + 'cq/%s/'
|
||||||
firstStripUrl = stripUrl % 'page-1'
|
firstStripUrl = stripUrl % 'page-1'
|
||||||
|
@ -419,7 +419,7 @@ class CucumberQuest(_WPWebcomic):
|
||||||
help = 'Index format: stripname'
|
help = 'Index format: stripname'
|
||||||
|
|
||||||
|
|
||||||
class Curtailed(_WordPressScraper):
|
class Curtailed(WordPressScraper):
|
||||||
url = 'https://www.curtailedcomic.com/'
|
url = 'https://www.curtailedcomic.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % '001-sneeze'
|
firstStripUrl = stripUrl % '001-sneeze'
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
||||||
# Copyright (C) 2012-2014 Bastian Kleineidam
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
# Copyright (C) 2015-2020 Tobias Gruetzmacher
|
# Copyright (C) 2015-2022 Tobias Gruetzmacher
|
||||||
from ..helpers import indirectStarter
|
from ..helpers import indirectStarter
|
||||||
from ..scraper import _ParserScraper
|
from ..scraper import ParserScraper
|
||||||
from ..util import getQueryParams
|
from ..util import getQueryParams
|
||||||
|
|
||||||
|
|
||||||
class CloneManga(_ParserScraper):
|
class CloneManga(ParserScraper):
|
||||||
baseUrl = 'http://manga.clone-army.org'
|
baseUrl = 'http://manga.clone-army.org'
|
||||||
imageSearch = '//div[d:class("subsectionContainer")]//img'
|
imageSearch = '//div[d:class("subsectionContainer")]//img'
|
||||||
prevSearch = '//a[span[text()="<<"]]'
|
prevSearch = '//a[span[text()="<<"]]'
|
||||||
|
@ -16,7 +16,7 @@ class CloneManga(_ParserScraper):
|
||||||
help = 'Index format: n'
|
help = 'Index format: n'
|
||||||
|
|
||||||
def __init__(self, name, shortName, endOfLife=False):
|
def __init__(self, name, shortName, endOfLife=False):
|
||||||
super(CloneManga, self).__init__('CloneManga/' + name)
|
super().__init__('CloneManga/' + name)
|
||||||
self.stripUrl = '%s/viewer.php?page=%%s&lang=&series=%s&HUDoff=' % (
|
self.stripUrl = '%s/viewer.php?page=%%s&lang=&series=%s&HUDoff=' % (
|
||||||
self.baseUrl, shortName)
|
self.baseUrl, shortName)
|
||||||
self.url = self.stripUrl % '1'
|
self.url = self.stripUrl % '1'
|
||||||
|
|
|
@ -5,14 +5,14 @@
|
||||||
# Copyright (C) 2019-2020 Daniel Ring
|
# Copyright (C) 2019-2020 Daniel Ring
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from ..scraper import _ParserScraper
|
from ..scraper import ParserScraper
|
||||||
from ..helpers import bounceStarter
|
from ..helpers import bounceStarter
|
||||||
|
|
||||||
XPATH_LINK = '//a[d:class("%s") and contains(text(), "%s")]'
|
XPATH_LINK = '//a[d:class("%s") and contains(text(), "%s")]'
|
||||||
XPATH_IMG = '//div[d:class("comicnav")]//a[img[contains(@alt, "%s")]]'
|
XPATH_IMG = '//div[d:class("comicnav")]//a[img[contains(@alt, "%s")]]'
|
||||||
|
|
||||||
|
|
||||||
class ComicFury(_ParserScraper):
|
class ComicFury(ParserScraper):
|
||||||
imageSearch = (
|
imageSearch = (
|
||||||
'//img[@id="comicimage"]',
|
'//img[@id="comicimage"]',
|
||||||
'//div[@id="comicimagewrap"]//embed',
|
'//div[@id="comicimagewrap"]//embed',
|
||||||
|
@ -56,7 +56,7 @@ class ComicFury(_ParserScraper):
|
||||||
starter = bounceStarter
|
starter = bounceStarter
|
||||||
|
|
||||||
def __init__(self, name, sub, lang=None, adult=False, endOfLife=False, segmented=False):
|
def __init__(self, name, sub, lang=None, adult=False, endOfLife=False, segmented=False):
|
||||||
super(ComicFury, self).__init__('ComicFury/' + name)
|
super().__init__('ComicFury/' + name)
|
||||||
self.prefix = name
|
self.prefix = name
|
||||||
self.url = 'https://%s.webcomic.ws/comics/' % sub
|
self.url = 'https://%s.webcomic.ws/comics/' % sub
|
||||||
self.stripUrl = self.url + '%s'
|
self.stripUrl = self.url + '%s'
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
||||||
# Copyright (C) 2012-2014 Bastian Kleineidam
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
# Copyright (C) 2015-2020 Tobias Gruetzmacher
|
# Copyright (C) 2015-2022 Tobias Gruetzmacher
|
||||||
# Copyright (C) 2019-2020 Daniel Ring
|
# Copyright (C) 2019-2020 Daniel Ring
|
||||||
from ..scraper import _ParserScraper
|
from ..scraper import ParserScraper
|
||||||
|
|
||||||
# Comicgenesis has a lot of comics, but most of them are disallowed by
|
# Comicgenesis has a lot of comics, but most of them are disallowed by
|
||||||
# robots.txt
|
# robots.txt
|
||||||
|
|
||||||
|
|
||||||
class ComicGenesis(_ParserScraper):
|
class ComicGenesis(ParserScraper):
|
||||||
multipleImagesPerStrip = True
|
multipleImagesPerStrip = True
|
||||||
imageSearch = '//img[contains(@src, "/comics/")]'
|
imageSearch = '//img[contains(@src, "/comics/")]'
|
||||||
prevSearch = (
|
prevSearch = (
|
||||||
|
@ -19,7 +19,7 @@ class ComicGenesis(_ParserScraper):
|
||||||
help = 'Index format: yyyymmdd'
|
help = 'Index format: yyyymmdd'
|
||||||
|
|
||||||
def __init__(self, name, sub=None, last=None, baseUrl=None, lang=None):
|
def __init__(self, name, sub=None, last=None, baseUrl=None, lang=None):
|
||||||
super(ComicGenesis, self).__init__('ComicGenesis/' + name)
|
super().__init__('ComicGenesis/' + name)
|
||||||
|
|
||||||
if sub:
|
if sub:
|
||||||
baseUrl = 'http://%s.comicgenesis.com/' % sub
|
baseUrl = 'http://%s.comicgenesis.com/' % sub
|
||||||
|
|
|
@ -4,10 +4,10 @@
|
||||||
from importlib.resources import path as get_path
|
from importlib.resources import path as get_path
|
||||||
|
|
||||||
from ..helpers import bounceStarter, joinPathPartsNamer
|
from ..helpers import bounceStarter, joinPathPartsNamer
|
||||||
from ..scraper import _ParserScraper
|
from ..scraper import ParserScraper
|
||||||
|
|
||||||
|
|
||||||
class ComicsKingdom(_ParserScraper):
|
class ComicsKingdom(ParserScraper):
|
||||||
imageSearch = '//img[@id="theComicImage"]'
|
imageSearch = '//img[@id="theComicImage"]'
|
||||||
prevSearch = '//a[./img[contains(@alt, "Previous")]]'
|
prevSearch = '//a[./img[contains(@alt, "Previous")]]'
|
||||||
nextSearch = '//a[./img[contains(@alt, "Next")]]'
|
nextSearch = '//a[./img[contains(@alt, "Next")]]'
|
||||||
|
|
|
@ -5,43 +5,51 @@
|
||||||
# Copyright (C) 2019-2020 Daniel Ring
|
# Copyright (C) 2019-2020 Daniel Ring
|
||||||
from typing import Sequence, Union
|
from typing import Sequence, Union
|
||||||
|
|
||||||
from ..scraper import _ParserScraper
|
from ..scraper import ParserScraper
|
||||||
|
|
||||||
# Common base classes for comics with the same structure (same hosting
|
# Common base classes for comics with the same structure (same hosting
|
||||||
# software, for example) go here. Since those are shared by many modules,
|
# software, for example) go here. Since those are shared by many modules,
|
||||||
# please don't use lists of expression, as that makes it hard to track which
|
# please don't use lists of expression, as that makes it hard to track which
|
||||||
# expression is for which comics.
|
# expression is for which comics.
|
||||||
|
__all__ = (
|
||||||
|
'ComicControlScraper',
|
||||||
|
'WordPressNavi',
|
||||||
|
'WordPressNaviIn',
|
||||||
|
'WordPressScraper',
|
||||||
|
'WordPressSpliced',
|
||||||
|
'WordPressWebcomic',
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class _WordPressScraper(_ParserScraper):
|
class ComicControlScraper(ParserScraper):
|
||||||
|
imageSearch: Union[Sequence[str], str] = '//img[@id="cc-comic"]'
|
||||||
|
prevSearch = '//a[@rel="prev"]'
|
||||||
|
nextSearch = '//a[@rel="next"]'
|
||||||
|
latestSearch = '//a[@rel="last"]'
|
||||||
|
|
||||||
|
|
||||||
|
class WordPressScraper(ParserScraper):
|
||||||
imageSearch = '//div[@id="comic"]//img'
|
imageSearch = '//div[@id="comic"]//img'
|
||||||
prevSearch = '//a[d:class("comic-nav-previous")]'
|
prevSearch = '//a[d:class("comic-nav-previous")]'
|
||||||
nextSearch = '//a[d:class("comic-nav-next")]'
|
nextSearch = '//a[d:class("comic-nav-next")]'
|
||||||
latestSearch = '//a[d:class("comic-nav-last")]'
|
latestSearch = '//a[d:class("comic-nav-last")]'
|
||||||
|
|
||||||
|
|
||||||
class _WordPressSpliced(_ParserScraper):
|
class WordPressSpliced(ParserScraper):
|
||||||
imageSearch = '//div[@id="one-comic-option"]//img'
|
imageSearch = '//div[@id="one-comic-option"]//img'
|
||||||
prevSearch = '//a[d:class("previous-comic")]'
|
prevSearch = '//a[d:class("previous-comic")]'
|
||||||
|
|
||||||
|
|
||||||
class _WPNavi(_WordPressScraper):
|
class WordPressNavi(WordPressScraper):
|
||||||
prevSearch = '//a[d:class("navi-prev")]'
|
prevSearch = '//a[d:class("navi-prev")]'
|
||||||
|
|
||||||
|
|
||||||
class _WPNaviIn(_WordPressScraper):
|
class WordPressNaviIn(WordPressScraper):
|
||||||
prevSearch = '//a[d:class("navi-prev-in")]'
|
prevSearch = '//a[d:class("navi-prev-in")]'
|
||||||
|
|
||||||
|
|
||||||
class _WPWebcomic(_ParserScraper):
|
class WordPressWebcomic(ParserScraper):
|
||||||
imageSearch = '//div[d:class("webcomic-image")]//img'
|
imageSearch = '//div[d:class("webcomic-image")]//img'
|
||||||
prevSearch = '//a[d:class("previous-webcomic-link")]'
|
prevSearch = '//a[d:class("previous-webcomic-link")]'
|
||||||
nextSearch = '///a[d:class("next-webcomic-link")]'
|
nextSearch = '///a[d:class("next-webcomic-link")]'
|
||||||
latestSearch = '//a[d:class("last-webcomic-link")]'
|
latestSearch = '//a[d:class("last-webcomic-link")]'
|
||||||
|
|
||||||
|
|
||||||
class _ComicControlScraper(_ParserScraper):
|
|
||||||
imageSearch: Union[Sequence[str], str] = '//img[@id="cc-comic"]'
|
|
||||||
prevSearch = '//a[@rel="prev"]'
|
|
||||||
nextSearch = '//a[@rel="next"]'
|
|
||||||
latestSearch = '//a[@rel="last"]'
|
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
||||||
# Copyright (C) 2012-2014 Bastian Kleineidam
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
# Copyright (C) 2015-2020 Tobias Gruetzmacher
|
# Copyright (C) 2015-2022 Tobias Gruetzmacher
|
||||||
from ..scraper import _ParserScraper
|
from ..scraper import ParserScraper
|
||||||
from ..helpers import indirectStarter
|
from ..helpers import indirectStarter
|
||||||
|
|
||||||
|
|
||||||
class Creators(_ParserScraper):
|
class Creators(ParserScraper):
|
||||||
imageSearch = '//a[contains(@class,"fancybox")]/img'
|
imageSearch = '//a[contains(@class,"fancybox")]/img'
|
||||||
prevSearch = '//a[@id="nav_prev"]'
|
prevSearch = '//a[@id="nav_prev"]'
|
||||||
latestSearch = '//div[contains(@class,"caption")]/a'
|
latestSearch = '//div[contains(@class,"caption")]/a'
|
||||||
|
|
|
@ -8,8 +8,8 @@ from re import compile, escape
|
||||||
from ..scraper import _BasicScraper, _ParserScraper
|
from ..scraper import _BasicScraper, _ParserScraper
|
||||||
from ..helpers import indirectStarter, bounceStarter
|
from ..helpers import indirectStarter, bounceStarter
|
||||||
from ..util import tagre
|
from ..util import tagre
|
||||||
from .common import (_ComicControlScraper, _WordPressScraper, _WPNavi,
|
from .common import (ComicControlScraper, WordPressScraper, WordPressNavi,
|
||||||
_WPWebcomic)
|
WordPressWebcomic)
|
||||||
|
|
||||||
|
|
||||||
class Damonk(_BasicScraper):
|
class Damonk(_BasicScraper):
|
||||||
|
@ -22,12 +22,12 @@ class Damonk(_BasicScraper):
|
||||||
help = 'Index format: yyyymmdd'
|
help = 'Index format: yyyymmdd'
|
||||||
|
|
||||||
|
|
||||||
class DangerouslyChloe(_ComicControlScraper):
|
class DangerouslyChloe(ComicControlScraper):
|
||||||
url = 'http://www.dangerouslychloe.com/'
|
url = 'http://www.dangerouslychloe.com/'
|
||||||
firstStripUrl = url + 'strips-dc/Chapter_1_-_That_damned_girl'
|
firstStripUrl = url + 'strips-dc/Chapter_1_-_That_damned_girl'
|
||||||
|
|
||||||
|
|
||||||
class DarkWhite(_WordPressScraper):
|
class DarkWhite(WordPressScraper):
|
||||||
url = 'https://www.darkwhitecomic.com/'
|
url = 'https://www.darkwhitecomic.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % 'chapter-1-sleep'
|
firstStripUrl = stripUrl % 'chapter-1-sleep'
|
||||||
|
@ -52,7 +52,7 @@ class DasLebenIstKeinPonyhof(_ParserScraper):
|
||||||
lang = 'de'
|
lang = 'de'
|
||||||
|
|
||||||
|
|
||||||
class DaughterOfTheLilies(_ComicControlScraper):
|
class DaughterOfTheLilies(ComicControlScraper):
|
||||||
url = 'https://www.daughterofthelilies.com/'
|
url = 'https://www.daughterofthelilies.com/'
|
||||||
firstStripUrl = url + 'dotl/part-1-a-girl-with-no-face'
|
firstStripUrl = url + 'dotl/part-1-a-girl-with-no-face'
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ class DeerMe(_ParserScraper):
|
||||||
starter = bounceStarter
|
starter = bounceStarter
|
||||||
|
|
||||||
|
|
||||||
class Delve(_WordPressScraper):
|
class Delve(WordPressScraper):
|
||||||
url = 'https://thisis.delvecomic.com/NewWP/'
|
url = 'https://thisis.delvecomic.com/NewWP/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % 'in-too-deep'
|
firstStripUrl = stripUrl % 'in-too-deep'
|
||||||
|
@ -138,7 +138,7 @@ class DerTodUndDasMaedchen(_ParserScraper):
|
||||||
lang = 'de'
|
lang = 'de'
|
||||||
|
|
||||||
|
|
||||||
class DesertFox(_WPWebcomic):
|
class DesertFox(WordPressWebcomic):
|
||||||
url = 'https://desertfoxcomics.net/'
|
url = 'https://desertfoxcomics.net/'
|
||||||
stripUrl = url + 'comics/%s/'
|
stripUrl = url + 'comics/%s/'
|
||||||
firstStripUrl = stripUrl % 'origins-1'
|
firstStripUrl = stripUrl % 'origins-1'
|
||||||
|
@ -206,7 +206,7 @@ class Dilbert(_ParserScraper):
|
||||||
return "%s" % name
|
return "%s" % name
|
||||||
|
|
||||||
|
|
||||||
class DocRat(_WPWebcomic):
|
class DocRat(WordPressWebcomic):
|
||||||
url = 'https://www.docrat.com.au/'
|
url = 'https://www.docrat.com.au/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % 'begin-with-eye-contact'
|
firstStripUrl = stripUrl % 'begin-with-eye-contact'
|
||||||
|
@ -239,7 +239,7 @@ class DoemainOfOurOwn(_ParserScraper):
|
||||||
return filename
|
return filename
|
||||||
|
|
||||||
|
|
||||||
class DoesNotPlayWellWithOthers(_WPNavi):
|
class DoesNotPlayWellWithOthers(WordPressNavi):
|
||||||
url = 'http://www.doesnotplaywellwithothers.com/'
|
url = 'http://www.doesnotplaywellwithothers.com/'
|
||||||
stripUrl = url + 'comic/%s'
|
stripUrl = url + 'comic/%s'
|
||||||
firstStripUrl = stripUrl % 'pwc-0001'
|
firstStripUrl = stripUrl % 'pwc-0001'
|
||||||
|
@ -283,7 +283,7 @@ class DoomsdayMyDear(_ParserScraper):
|
||||||
prevSearch = '//a[d:class("previous-webcomic-link")]'
|
prevSearch = '//a[d:class("previous-webcomic-link")]'
|
||||||
|
|
||||||
|
|
||||||
class Draconia(_WPWebcomic):
|
class Draconia(WordPressWebcomic):
|
||||||
url = 'https://www.draconiachronicles.com/'
|
url = 'https://www.draconiachronicles.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % 'chapter-1-page-1'
|
firstStripUrl = stripUrl % 'chapter-1-page-1'
|
||||||
|
@ -372,7 +372,7 @@ class Drowtales(_ParserScraper):
|
||||||
help = 'Index format: number'
|
help = 'Index format: number'
|
||||||
|
|
||||||
|
|
||||||
class DungeonsAndDenizens(_WPNavi):
|
class DungeonsAndDenizens(WordPressNavi):
|
||||||
url = ('https://web.archive.org/web/20160308001834/'
|
url = ('https://web.archive.org/web/20160308001834/'
|
||||||
'http://dungeond.com/')
|
'http://dungeond.com/')
|
||||||
stripUrl = url + '%s/'
|
stripUrl = url + '%s/'
|
||||||
|
@ -380,7 +380,7 @@ class DungeonsAndDenizens(_WPNavi):
|
||||||
endOfLife = True
|
endOfLife = True
|
||||||
|
|
||||||
|
|
||||||
class DumbingOfAge(_WPNavi):
|
class DumbingOfAge(WordPressNavi):
|
||||||
url = 'http://www.dumbingofage.com/'
|
url = 'http://www.dumbingofage.com/'
|
||||||
stripUrl = url + '%s/'
|
stripUrl = url + '%s/'
|
||||||
help = 'Index format: yyyy/comic/book-num/seriesname/stripname'
|
help = 'Index format: yyyy/comic/book-num/seriesname/stripname'
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
# Copyright (C) 2019-2020 Tobias Gruetzmacher
|
# Copyright (C) 2019-2022 Tobias Gruetzmacher
|
||||||
# Copyright (C) 2019-2020 Daniel Ring
|
# Copyright (C) 2019-2020 Daniel Ring
|
||||||
from ..scraper import _ParserScraper
|
from ..scraper import ParserScraper
|
||||||
from ..helpers import indirectStarter
|
from ..helpers import indirectStarter
|
||||||
|
|
||||||
|
|
||||||
class Derideal(_ParserScraper):
|
class Derideal(ParserScraper):
|
||||||
baseUrl = 'https://www.derideal.com/'
|
baseUrl = 'https://www.derideal.com/'
|
||||||
imageSearch = '//img[contains(@class, "comic-page")]'
|
imageSearch = '//img[contains(@class, "comic-page")]'
|
||||||
prevSearch = '//a[i[contains(@class, "fa-angle-left")]]'
|
prevSearch = '//a[i[contains(@class, "fa-angle-left")]]'
|
||||||
|
@ -13,9 +13,9 @@ class Derideal(_ParserScraper):
|
||||||
|
|
||||||
def __init__(self, name, sub, first, last=None):
|
def __init__(self, name, sub, first, last=None):
|
||||||
if name == 'Derideal':
|
if name == 'Derideal':
|
||||||
super(Derideal, self).__init__(name)
|
super().__init__(name)
|
||||||
else:
|
else:
|
||||||
super(Derideal, self).__init__('Derideal/' + name)
|
super().__init__('Derideal/' + name)
|
||||||
|
|
||||||
self.url = self.baseUrl + sub
|
self.url = self.baseUrl + sub
|
||||||
self.stripUrl = self.url + '/%s/'
|
self.stripUrl = self.url + '/%s/'
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
# Copyright (C) 2019-2020 Tobias Gruetzmacher
|
# Copyright (C) 2019-2022 Tobias Gruetzmacher
|
||||||
# Copyright (C) 2019-2020 Daniel Ring
|
# Copyright (C) 2019-2020 Daniel Ring
|
||||||
from ..helpers import bounceStarter
|
from ..helpers import bounceStarter
|
||||||
from .common import _ParserScraper
|
from ..scraper import ParserScraper
|
||||||
|
|
||||||
|
|
||||||
class DMFA(_ParserScraper):
|
class DMFA(ParserScraper):
|
||||||
url = 'http://www.missmab.com/'
|
url = 'http://www.missmab.com/'
|
||||||
stripUrl = url + 'Comics/%s.php'
|
stripUrl = url + 'Comics/%s.php'
|
||||||
imageSearch = '//center//img'
|
imageSearch = '//center//img'
|
||||||
|
|
|
@ -9,7 +9,7 @@ from re import compile, IGNORECASE
|
||||||
from ..helpers import bounceStarter, indirectStarter
|
from ..helpers import bounceStarter, indirectStarter
|
||||||
from ..scraper import _BasicScraper, _ParserScraper
|
from ..scraper import _BasicScraper, _ParserScraper
|
||||||
from ..util import tagre
|
from ..util import tagre
|
||||||
from .common import _ComicControlScraper, _WordPressScraper, _WPNavi
|
from .common import ComicControlScraper, WordPressScraper, WordPressNavi
|
||||||
|
|
||||||
|
|
||||||
class EarthsongSaga(_ParserScraper):
|
class EarthsongSaga(_ParserScraper):
|
||||||
|
@ -51,10 +51,10 @@ class EatLiver(_ParserScraper):
|
||||||
latestSearch = '//a[@rel="bookmark"]'
|
latestSearch = '//a[@rel="bookmark"]'
|
||||||
|
|
||||||
|
|
||||||
class EatThatToast(_WordPressScraper):
|
class EatThatToast(WordPressScraper):
|
||||||
url = 'http://eatthattoast.com/'
|
url = 'http://eatthattoast.com/'
|
||||||
firstStripUrl = url + 'comic/thewizard/'
|
firstStripUrl = url + 'comic/thewizard/'
|
||||||
textSearch = _WordPressScraper.imageSearch + '/@alt'
|
textSearch = WordPressScraper.imageSearch + '/@alt'
|
||||||
|
|
||||||
|
|
||||||
class EdibleDirt(_BasicScraper):
|
class EdibleDirt(_BasicScraper):
|
||||||
|
@ -67,7 +67,7 @@ class EdibleDirt(_BasicScraper):
|
||||||
help = 'Index format: number'
|
help = 'Index format: number'
|
||||||
|
|
||||||
|
|
||||||
class EdmundFinney(_WPNavi):
|
class EdmundFinney(WordPressNavi):
|
||||||
url = 'http://eqcomics.com/'
|
url = 'http://eqcomics.com/'
|
||||||
firstStripUrl = url + '2009/03/08/sunday-aliens/'
|
firstStripUrl = url + '2009/03/08/sunday-aliens/'
|
||||||
|
|
||||||
|
@ -82,11 +82,11 @@ class ElfOnlyInn(_BasicScraper):
|
||||||
help = 'Index format: yyyymmdd'
|
help = 'Index format: yyyymmdd'
|
||||||
|
|
||||||
|
|
||||||
class ElGoonishShive(_ComicControlScraper):
|
class ElGoonishShive(ComicControlScraper):
|
||||||
url = 'http://www.egscomics.com/'
|
url = 'http://www.egscomics.com/'
|
||||||
|
|
||||||
|
|
||||||
class ElGoonishShiveNP(_ComicControlScraper):
|
class ElGoonishShiveNP(ComicControlScraper):
|
||||||
url = 'http://www.egscomics.com/egsnp.php'
|
url = 'http://www.egscomics.com/egsnp.php'
|
||||||
|
|
||||||
|
|
||||||
|
@ -165,12 +165,12 @@ class ErrantStory(_BasicScraper):
|
||||||
help = 'Index format: yyyy-mm-dd/num'
|
help = 'Index format: yyyy-mm-dd/num'
|
||||||
|
|
||||||
|
|
||||||
class Erstwhile(_WPNavi):
|
class Erstwhile(WordPressNavi):
|
||||||
url = 'http://www.erstwhiletales.com/'
|
url = 'http://www.erstwhiletales.com/'
|
||||||
endOfLife = True
|
endOfLife = True
|
||||||
|
|
||||||
|
|
||||||
class Everblue(_ComicControlScraper):
|
class Everblue(ComicControlScraper):
|
||||||
url = 'http://www.everblue-comic.com/comic/'
|
url = 'http://www.everblue-comic.com/comic/'
|
||||||
stripUrl = url + '%s'
|
stripUrl = url + '%s'
|
||||||
firstStripUrl = stripUrl % '1'
|
firstStripUrl = stripUrl % '1'
|
||||||
|
@ -186,7 +186,7 @@ class EverybodyLovesEricRaymond(_ParserScraper):
|
||||||
prevSearch = '//a[@rel="prev"]'
|
prevSearch = '//a[@rel="prev"]'
|
||||||
|
|
||||||
|
|
||||||
class EvilDiva(_WordPressScraper):
|
class EvilDiva(WordPressScraper):
|
||||||
url = ('https://web.archive.org/web/20190221223751/'
|
url = ('https://web.archive.org/web/20190221223751/'
|
||||||
'https://www.evildivacomics.com/')
|
'https://www.evildivacomics.com/')
|
||||||
firstStripUrl = url + 'comic/evil-diva-issue-1-cover/'
|
firstStripUrl = url + 'comic/evil-diva-issue-1-cover/'
|
||||||
|
@ -210,19 +210,19 @@ class Evilish(_ParserScraper):
|
||||||
help = 'Index format: yyyymmdd'
|
help = 'Index format: yyyymmdd'
|
||||||
|
|
||||||
|
|
||||||
class Evon(_WordPressScraper):
|
class Evon(WordPressScraper):
|
||||||
url = 'http://evoncomics.com/'
|
url = 'http://evoncomics.com/'
|
||||||
stripUrl = url + '?comic=%s'
|
stripUrl = url + '?comic=%s'
|
||||||
firstStripUrl = stripUrl % 'chapter-1'
|
firstStripUrl = stripUrl % 'chapter-1'
|
||||||
adult = True
|
adult = True
|
||||||
|
|
||||||
|
|
||||||
class Exiern(_WordPressScraper):
|
class Exiern(WordPressScraper):
|
||||||
url = 'http://www.exiern.com/'
|
url = 'http://www.exiern.com/'
|
||||||
firstStripUrl = url + '2005/09/06/so-far/'
|
firstStripUrl = url + '2005/09/06/so-far/'
|
||||||
|
|
||||||
|
|
||||||
class ExploitationNow(_WPNavi):
|
class ExploitationNow(WordPressNavi):
|
||||||
url = 'http://www.exploitationnow.com/'
|
url = 'http://www.exploitationnow.com/'
|
||||||
firstStripUrl = url + '2000-07-07/9'
|
firstStripUrl = url + '2000-07-07/9'
|
||||||
endOfLife = True
|
endOfLife = True
|
||||||
|
@ -237,7 +237,7 @@ class Exvulnerum(_ParserScraper):
|
||||||
prevSearch = '//a[./img[contains(@src, "nav_prev")]]'
|
prevSearch = '//a[./img[contains(@src, "nav_prev")]]'
|
||||||
|
|
||||||
|
|
||||||
class ExtraFabulousComics(_WordPressScraper):
|
class ExtraFabulousComics(WordPressScraper):
|
||||||
url = 'https://extrafabulouscomics.com/'
|
url = 'https://extrafabulouscomics.com/'
|
||||||
firstStripUrl = url + 'comic/buttfly/'
|
firstStripUrl = url + 'comic/buttfly/'
|
||||||
starter = bounceStarter
|
starter = bounceStarter
|
||||||
|
|
|
@ -8,7 +8,7 @@ from re import compile, escape
|
||||||
from ..util import tagre
|
from ..util import tagre
|
||||||
from ..scraper import _BasicScraper, _ParserScraper
|
from ..scraper import _BasicScraper, _ParserScraper
|
||||||
from ..helpers import indirectStarter, joinPathPartsNamer
|
from ..helpers import indirectStarter, joinPathPartsNamer
|
||||||
from .common import _ComicControlScraper, _WPNaviIn, _WordPressScraper
|
from .common import ComicControlScraper, WordPressNaviIn, WordPressScraper
|
||||||
|
|
||||||
|
|
||||||
class FalconTwin(_BasicScraper):
|
class FalconTwin(_BasicScraper):
|
||||||
|
@ -38,7 +38,7 @@ class FalseStart(_ParserScraper):
|
||||||
return self.archive[self.archive.index(url) - 1]
|
return self.archive[self.archive.index(url) - 1]
|
||||||
|
|
||||||
|
|
||||||
class Faneurysm(_WPNaviIn):
|
class Faneurysm(WordPressNaviIn):
|
||||||
url = 'http://hijinksensue.com/comic/think-only-tree/'
|
url = 'http://hijinksensue.com/comic/think-only-tree/'
|
||||||
firstStripUrl = 'http://hijinksensue.com/comic/captains-prerogative/'
|
firstStripUrl = 'http://hijinksensue.com/comic/captains-prerogative/'
|
||||||
endOfLife = True
|
endOfLife = True
|
||||||
|
@ -55,7 +55,7 @@ class FantasyRealms(_ParserScraper):
|
||||||
help = 'Index format: nnn'
|
help = 'Index format: nnn'
|
||||||
|
|
||||||
|
|
||||||
class FarToTheNorth(_ComicControlScraper):
|
class FarToTheNorth(ComicControlScraper):
|
||||||
url = 'http://www.farnorthcomic.com/'
|
url = 'http://www.farnorthcomic.com/'
|
||||||
stripUrl = url + 'comic/%s'
|
stripUrl = url + 'comic/%s'
|
||||||
firstStripUrl = stripUrl % 'don39t-tell'
|
firstStripUrl = stripUrl % 'don39t-tell'
|
||||||
|
@ -70,7 +70,7 @@ class FauxPas(_ParserScraper):
|
||||||
help = 'Index format: nnn'
|
help = 'Index format: nnn'
|
||||||
|
|
||||||
|
|
||||||
class FireflyCross(_WordPressScraper):
|
class FireflyCross(WordPressScraper):
|
||||||
url = 'http://www.fireflycross.pensandtales.com/'
|
url = 'http://www.fireflycross.pensandtales.com/'
|
||||||
firstStripUrl = url + '?comic=05062002'
|
firstStripUrl = url + '?comic=05062002'
|
||||||
|
|
||||||
|
@ -135,7 +135,7 @@ class FonFlatter(_ParserScraper):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class ForestHill(_WordPressScraper):
|
class ForestHill(WordPressScraper):
|
||||||
url = 'https://www.foresthillcomic.org/'
|
url = 'https://www.foresthillcomic.org/'
|
||||||
|
|
||||||
|
|
||||||
|
@ -226,7 +226,7 @@ class FreighterTails(_ParserScraper):
|
||||||
endOfLife = True
|
endOfLife = True
|
||||||
|
|
||||||
|
|
||||||
class FriendsYouAreStuckWith(_WordPressScraper):
|
class FriendsYouAreStuckWith(WordPressScraper):
|
||||||
url = 'http://friendsyasw.com/'
|
url = 'http://friendsyasw.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % 'wanted'
|
firstStripUrl = stripUrl % 'wanted'
|
||||||
|
@ -247,7 +247,7 @@ class FullFrontalNerdity(_BasicScraper):
|
||||||
help = 'Index format: number'
|
help = 'Index format: number'
|
||||||
|
|
||||||
|
|
||||||
class FunInJammies(_WordPressScraper):
|
class FunInJammies(WordPressScraper):
|
||||||
url = ('https://web.archive.org/web/20170205105241/'
|
url = ('https://web.archive.org/web/20170205105241/'
|
||||||
'http://funinjammies.com/')
|
'http://funinjammies.com/')
|
||||||
stripUrl = url + 'comic.php?issue=%s'
|
stripUrl = url + 'comic.php?issue=%s'
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
# Copyright (C) 2021 Tobias Gruetzmacher
|
# Copyright (C) 2021 Tobias Gruetzmacher
|
||||||
from ..helpers import indirectStarter
|
from ..helpers import indirectStarter
|
||||||
from .common import _WordPressScraper
|
from .common import WordPressScraper
|
||||||
|
|
||||||
|
|
||||||
class FlowerlarkStudios(_WordPressScraper):
|
class FlowerlarkStudios(WordPressScraper):
|
||||||
starter = indirectStarter
|
starter = indirectStarter
|
||||||
|
|
||||||
def __init__(self, name, sub):
|
def __init__(self, name, sub):
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
||||||
# Copyright (C) 2012-2014 Bastian Kleineidam
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
# Copyright (C) 2015-2016 Tobias Gruetzmacher
|
# Copyright (C) 2015-2022 Tobias Gruetzmacher
|
||||||
from ..scraper import _ParserScraper
|
from ..scraper import ParserScraper
|
||||||
|
|
||||||
|
|
||||||
class Footloose(_ParserScraper):
|
class Footloose(ParserScraper):
|
||||||
url = 'http://footloosecomic.com/footloose.php'
|
url = 'http://footloosecomic.com/footloose.php'
|
||||||
imageSearch = '//body/p[1]//img'
|
imageSearch = '//body/p[1]//img'
|
||||||
prevSearch = '//body/a[2]'
|
prevSearch = '//body/a[2]'
|
||||||
|
|
|
@ -8,10 +8,10 @@ from re import compile, escape
|
||||||
from ..scraper import _BasicScraper, _ParserScraper
|
from ..scraper import _BasicScraper, _ParserScraper
|
||||||
from ..helpers import indirectStarter
|
from ..helpers import indirectStarter
|
||||||
from ..util import tagre
|
from ..util import tagre
|
||||||
from .common import _ComicControlScraper, _WordPressScraper, _WPNavi
|
from .common import ComicControlScraper, WordPressScraper, WordPressNavi
|
||||||
|
|
||||||
|
|
||||||
class Galaxion(_WPNavi):
|
class Galaxion(WordPressNavi):
|
||||||
url = 'http://galaxioncomics.com/'
|
url = 'http://galaxioncomics.com/'
|
||||||
stripUrl = url + '%s/'
|
stripUrl = url + '%s/'
|
||||||
firstStripUrl = stripUrl % '1-comic/the-story-so-far/the-story-so-far'
|
firstStripUrl = stripUrl % '1-comic/the-story-so-far/the-story-so-far'
|
||||||
|
@ -19,7 +19,7 @@ class Galaxion(_WPNavi):
|
||||||
help = 'Index format: n-comic/book-n/chapter-n/title-nnn'
|
help = 'Index format: n-comic/book-n/chapter-n/title-nnn'
|
||||||
|
|
||||||
|
|
||||||
class Garanos(_WordPressScraper):
|
class Garanos(WordPressScraper):
|
||||||
stripUrl = ('https://web.archive.org/web/20180314181433/'
|
stripUrl = ('https://web.archive.org/web/20180314181433/'
|
||||||
'http://garanos.alexheberling.com/pages/%s/')
|
'http://garanos.alexheberling.com/pages/%s/')
|
||||||
url = stripUrl % 'page-487'
|
url = stripUrl % 'page-487'
|
||||||
|
@ -59,7 +59,7 @@ class GeeksNextDoor(_ParserScraper):
|
||||||
help = 'Index format: yyyy-mm-dd'
|
help = 'Index format: yyyy-mm-dd'
|
||||||
|
|
||||||
|
|
||||||
class Ginpu(_WPNavi):
|
class Ginpu(WordPressNavi):
|
||||||
url = 'https://www.ginpu.us/'
|
url = 'https://www.ginpu.us/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % 'filler-2'
|
firstStripUrl = stripUrl % 'filler-2'
|
||||||
|
@ -98,7 +98,7 @@ class GirlsWithSlingshots(_BasicScraper):
|
||||||
help = 'Index format: stripname'
|
help = 'Index format: stripname'
|
||||||
|
|
||||||
|
|
||||||
class GleefulNihilism(_WordPressScraper):
|
class GleefulNihilism(WordPressScraper):
|
||||||
url = ('https://web.archive.org/web/20170911203122/'
|
url = ('https://web.archive.org/web/20170911203122/'
|
||||||
'http://gleefulnihilism.com/')
|
'http://gleefulnihilism.com/')
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
|
@ -107,15 +107,15 @@ class GleefulNihilism(_WordPressScraper):
|
||||||
help = 'Index format: stripname'
|
help = 'Index format: stripname'
|
||||||
|
|
||||||
|
|
||||||
class GoblinsComic(_ComicControlScraper):
|
class GoblinsComic(ComicControlScraper):
|
||||||
url = 'http://www.goblinscomic.org/'
|
url = 'http://www.goblinscomic.org/'
|
||||||
|
|
||||||
|
|
||||||
class GodChild(_WordPressScraper):
|
class GodChild(WordPressScraper):
|
||||||
url = 'http://godchild.keenspot.com/'
|
url = 'http://godchild.keenspot.com/'
|
||||||
|
|
||||||
|
|
||||||
class GoGetARoomie(_ComicControlScraper):
|
class GoGetARoomie(ComicControlScraper):
|
||||||
url = 'http://www.gogetaroomie.com'
|
url = 'http://www.gogetaroomie.com'
|
||||||
|
|
||||||
|
|
||||||
|
@ -135,7 +135,7 @@ class GoneWithTheBlastwave(_BasicScraper):
|
||||||
return '%02d' % int(compile(r'nro=(\d+)').search(page_url).group(1))
|
return '%02d' % int(compile(r'nro=(\d+)').search(page_url).group(1))
|
||||||
|
|
||||||
|
|
||||||
class GrrlPower(_WordPressScraper):
|
class GrrlPower(WordPressScraper):
|
||||||
url = 'https://grrlpowercomic.com/'
|
url = 'https://grrlpowercomic.com/'
|
||||||
stripUrl = url + 'archives/comic/%s/'
|
stripUrl = url + 'archives/comic/%s/'
|
||||||
firstStripUrl = stripUrl % 'gp0001'
|
firstStripUrl = stripUrl % 'gp0001'
|
||||||
|
@ -145,7 +145,7 @@ class GrrlPower(_WordPressScraper):
|
||||||
self.session.add_throttle('grrlpowercomic.com', 1.0, 1.5)
|
self.session.add_throttle('grrlpowercomic.com', 1.0, 1.5)
|
||||||
|
|
||||||
|
|
||||||
class GuildedAge(_WordPressScraper):
|
class GuildedAge(WordPressScraper):
|
||||||
url = 'http://guildedage.net/'
|
url = 'http://guildedage.net/'
|
||||||
firstStripUrl = url + 'comic/chapter-1-cover/'
|
firstStripUrl = url + 'comic/chapter-1-cover/'
|
||||||
|
|
||||||
|
|
|
@ -2,11 +2,11 @@
|
||||||
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
||||||
# Copyright (C) 2012-2014 Bastian Kleineidam
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
# Copyright (C) 2015-2022 Tobias Gruetzmacher
|
# Copyright (C) 2015-2022 Tobias Gruetzmacher
|
||||||
from ..scraper import _ParserScraper
|
from ..scraper import ParserScraper
|
||||||
from ..helpers import indirectStarter
|
from ..helpers import indirectStarter
|
||||||
|
|
||||||
|
|
||||||
class GoComics(_ParserScraper):
|
class GoComics(ParserScraper):
|
||||||
url = 'https://www.gocomics.com/'
|
url = 'https://www.gocomics.com/'
|
||||||
imageSearch = '//picture[d:class("item-comic-image")]/img'
|
imageSearch = '//picture[d:class("item-comic-image")]/img'
|
||||||
prevSearch = '//a[d:class("js-previous-comic")]'
|
prevSearch = '//a[d:class("js-previous-comic")]'
|
||||||
|
|
|
@ -1,17 +1,17 @@
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
||||||
# Copyright (C) 2012-2014 Bastian Kleineidam
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
# Copyright (C) 2015-2020 Tobias Gruetzmacher
|
# Copyright (C) 2015-2022 Tobias Gruetzmacher
|
||||||
# Copyright (C) 2019-2020 Daniel Ring
|
# Copyright (C) 2019-2020 Daniel Ring
|
||||||
from re import compile, escape
|
from re import compile, escape
|
||||||
|
|
||||||
from ..scraper import _BasicScraper, _ParserScraper
|
from ..scraper import BasicScraper, ParserScraper
|
||||||
from ..util import tagre
|
from ..util import tagre
|
||||||
from ..helpers import bounceStarter, indirectStarter
|
from ..helpers import bounceStarter, indirectStarter
|
||||||
from .common import _ComicControlScraper, _WordPressScraper, _WPNaviIn
|
from .common import ComicControlScraper, WordPressScraper, WordPressNaviIn
|
||||||
|
|
||||||
|
|
||||||
class Hackles(_ParserScraper):
|
class Hackles(ParserScraper):
|
||||||
url = 'http://hackles.org/'
|
url = 'http://hackles.org/'
|
||||||
stripUrl = url + 'cgi-bin/archives.pl?request=%s'
|
stripUrl = url + 'cgi-bin/archives.pl?request=%s'
|
||||||
firstStripUrl = stripUrl % '1'
|
firstStripUrl = stripUrl % '1'
|
||||||
|
@ -20,7 +20,7 @@ class Hackles(_ParserScraper):
|
||||||
endOfLife = True
|
endOfLife = True
|
||||||
|
|
||||||
|
|
||||||
class HagarTheHorrible(_BasicScraper):
|
class HagarTheHorrible(BasicScraper):
|
||||||
url = 'http://www.hagarthehorrible.net/'
|
url = 'http://www.hagarthehorrible.net/'
|
||||||
stripUrl = 'http://www.hagardunor.net/comicstrips_us.php?serietype=9&colortype=1&serieno=%s'
|
stripUrl = 'http://www.hagardunor.net/comicstrips_us.php?serietype=9&colortype=1&serieno=%s'
|
||||||
firstStripUrl = stripUrl % '1'
|
firstStripUrl = stripUrl % '1'
|
||||||
|
@ -38,12 +38,7 @@ class HagarTheHorrible(_BasicScraper):
|
||||||
return self.fetchUrls(url, data, pattern)[-1]
|
return self.fetchUrls(url, data, pattern)[-1]
|
||||||
|
|
||||||
|
|
||||||
# "Hiatus", navigation missing
|
class HarkAVagrant(BasicScraper):
|
||||||
class _HappyJar(_WordPressScraper):
|
|
||||||
url = 'http://www.happyjar.com/'
|
|
||||||
|
|
||||||
|
|
||||||
class HarkAVagrant(_BasicScraper):
|
|
||||||
url = 'http://www.harkavagrant.com/'
|
url = 'http://www.harkavagrant.com/'
|
||||||
rurl = escape(url)
|
rurl = escape(url)
|
||||||
starter = bounceStarter
|
starter = bounceStarter
|
||||||
|
@ -63,60 +58,60 @@ class HarkAVagrant(_BasicScraper):
|
||||||
return '%s-%s' % (num, filename)
|
return '%s-%s' % (num, filename)
|
||||||
|
|
||||||
|
|
||||||
class HavocInc(_WordPressScraper):
|
class HavocInc(WordPressScraper):
|
||||||
url = 'http://www.radiocomix.com/havoc-inc/'
|
url = 'http://www.radiocomix.com/havoc-inc/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % 'havoc-cover'
|
firstStripUrl = stripUrl % 'havoc-cover'
|
||||||
|
|
||||||
|
|
||||||
class HeadlessBliss(_ComicControlScraper):
|
class HeadlessBliss(ComicControlScraper):
|
||||||
url = 'http://headlessbliss.com/'
|
url = 'http://headlessbliss.com/'
|
||||||
|
|
||||||
|
|
||||||
class HeyFox(_WordPressScraper):
|
class HeyFox(WordPressScraper):
|
||||||
url = 'http://www.steamclaw.com/heyfox/'
|
url = 'http://www.steamclaw.com/heyfox/'
|
||||||
stripUrl = url + 'archives/comic/%s'
|
stripUrl = url + 'archives/comic/%s'
|
||||||
firstStripUrl = stripUrl % '11092004'
|
firstStripUrl = stripUrl % '11092004'
|
||||||
adult = True
|
adult = True
|
||||||
|
|
||||||
|
|
||||||
class HeyKitty(_WordPressScraper):
|
class HeyKitty(WordPressScraper):
|
||||||
url = 'http://heykittycomic.com/'
|
url = 'http://heykittycomic.com/'
|
||||||
stripUrl = url + '?comic=%s'
|
stripUrl = url + '?comic=%s'
|
||||||
firstStripUrl = stripUrl % 'it-begins'
|
firstStripUrl = stripUrl % 'it-begins'
|
||||||
|
|
||||||
|
|
||||||
class Hipsters(_WordPressScraper):
|
class Hipsters(WordPressScraper):
|
||||||
url = 'http://www.hipsters-comic.com/'
|
url = 'http://www.hipsters-comic.com/'
|
||||||
firstStripUrl = 'http://www.hipsters-comic.com/comic/hip01/'
|
firstStripUrl = 'http://www.hipsters-comic.com/comic/hip01/'
|
||||||
|
|
||||||
|
|
||||||
class HijinksEnsue(_WPNaviIn):
|
class HijinksEnsue(WordPressNaviIn):
|
||||||
url = 'http://hijinksensue.com/'
|
url = 'http://hijinksensue.com/'
|
||||||
latestSearch = '//a[text()="Latest HijiNKS ENSUE"]'
|
latestSearch = '//a[text()="Latest HijiNKS ENSUE"]'
|
||||||
firstStripUrl = 'http://hijinksensue.com/comic/who-is-your-daddy-and-what-does-he-do/'
|
firstStripUrl = 'http://hijinksensue.com/comic/who-is-your-daddy-and-what-does-he-do/'
|
||||||
starter = indirectStarter
|
starter = indirectStarter
|
||||||
|
|
||||||
|
|
||||||
class HijinksEnsueClassic(_WPNaviIn):
|
class HijinksEnsueClassic(WordPressNaviIn):
|
||||||
url = 'http://hijinksensue.com/comic/open-your-eyes/'
|
url = 'http://hijinksensue.com/comic/open-your-eyes/'
|
||||||
firstStripUrl = 'http://hijinksensue.com/comic/a-soul-as-black-as-eyeliner/'
|
firstStripUrl = 'http://hijinksensue.com/comic/a-soul-as-black-as-eyeliner/'
|
||||||
endOfLife = True
|
endOfLife = True
|
||||||
|
|
||||||
|
|
||||||
class HijinksEnsueConvention(_WPNaviIn):
|
class HijinksEnsueConvention(WordPressNaviIn):
|
||||||
url = 'http://hijinksensue.com/comic/emerald-city-comicon-2015-fancy-sketches-part-4/'
|
url = 'http://hijinksensue.com/comic/emerald-city-comicon-2015-fancy-sketches-part-4/'
|
||||||
firstStripUrl = 'http://hijinksensue.com/comic/whatever-dad-im-outta-here/'
|
firstStripUrl = 'http://hijinksensue.com/comic/whatever-dad-im-outta-here/'
|
||||||
endOfLife = True
|
endOfLife = True
|
||||||
|
|
||||||
|
|
||||||
class HijinksEnsuePhoto(_WPNaviIn):
|
class HijinksEnsuePhoto(WordPressNaviIn):
|
||||||
url = 'http://hijinksensue.com/comic/emerald-city-comicon-2015-fancy-photo-comic-part-2/'
|
url = 'http://hijinksensue.com/comic/emerald-city-comicon-2015-fancy-photo-comic-part-2/'
|
||||||
firstStripUrl = 'http://hijinksensue.com/comic/san-diego-comic-con-fancy-picto-comic-pt-1/'
|
firstStripUrl = 'http://hijinksensue.com/comic/san-diego-comic-con-fancy-picto-comic-pt-1/'
|
||||||
endOfLife = True
|
endOfLife = True
|
||||||
|
|
||||||
|
|
||||||
class HowToBeAWerewolf(_ComicControlScraper):
|
class HowToBeAWerewolf(ComicControlScraper):
|
||||||
url = 'http://howtobeawerewolf.com/'
|
url = 'http://howtobeawerewolf.com/'
|
||||||
stripUrl = url + 'comic/%s'
|
stripUrl = url + 'comic/%s'
|
||||||
firstStripUrl = stripUrl % 'coming-february-3rd'
|
firstStripUrl = stripUrl % 'coming-february-3rd'
|
||||||
|
|
|
@ -5,12 +5,12 @@
|
||||||
# Copyright (C) 2019-2020 Daniel Ring
|
# Copyright (C) 2019-2020 Daniel Ring
|
||||||
from re import compile, escape
|
from re import compile, escape
|
||||||
|
|
||||||
from ..scraper import _BasicScraper, _ParserScraper
|
from ..scraper import BasicScraper, ParserScraper
|
||||||
from ..util import tagre
|
from ..util import tagre
|
||||||
from .common import _WordPressScraper, _WPNavi
|
from .common import WordPressScraper, WordPressNavi
|
||||||
|
|
||||||
|
|
||||||
class IAmArg(_BasicScraper):
|
class IAmArg(BasicScraper):
|
||||||
url = 'http://iamarg.com/'
|
url = 'http://iamarg.com/'
|
||||||
rurl = escape(url)
|
rurl = escape(url)
|
||||||
stripUrl = url + '%s/'
|
stripUrl = url + '%s/'
|
||||||
|
@ -20,7 +20,7 @@ class IAmArg(_BasicScraper):
|
||||||
help = 'Index format: yyyy/mm/dd/stripname'
|
help = 'Index format: yyyy/mm/dd/stripname'
|
||||||
|
|
||||||
|
|
||||||
class ICanBarelyDraw(_BasicScraper):
|
class ICanBarelyDraw(BasicScraper):
|
||||||
url = 'http://www.icanbarelydraw.com/comic/'
|
url = 'http://www.icanbarelydraw.com/comic/'
|
||||||
rurl = escape(url)
|
rurl = escape(url)
|
||||||
stripUrl = url + '%s'
|
stripUrl = url + '%s'
|
||||||
|
@ -30,18 +30,18 @@ class ICanBarelyDraw(_BasicScraper):
|
||||||
help = 'Index format: number'
|
help = 'Index format: number'
|
||||||
|
|
||||||
|
|
||||||
class IDreamOfAJeanieBottle(_WordPressScraper):
|
class IDreamOfAJeanieBottle(WordPressScraper):
|
||||||
url = 'http://jeaniebottle.com/'
|
url = 'http://jeaniebottle.com/'
|
||||||
|
|
||||||
|
|
||||||
class InternetWebcomic(_WPNavi):
|
class InternetWebcomic(WordPressNavi):
|
||||||
url = 'http://www.internet-webcomic.com/'
|
url = 'http://www.internet-webcomic.com/'
|
||||||
stripUrl = url + '?p=%s'
|
stripUrl = url + '?p=%s'
|
||||||
firstStripUrl = stripUrl % '30'
|
firstStripUrl = stripUrl % '30'
|
||||||
help = 'Index format: n'
|
help = 'Index format: n'
|
||||||
|
|
||||||
|
|
||||||
class IrregularWebcomic(_BasicScraper):
|
class IrregularWebcomic(BasicScraper):
|
||||||
url = 'http://www.irregularwebcomic.net/'
|
url = 'http://www.irregularwebcomic.net/'
|
||||||
stripUrl = url + '%s.html'
|
stripUrl = url + '%s.html'
|
||||||
firstStripUrl = stripUrl % '1'
|
firstStripUrl = stripUrl % '1'
|
||||||
|
@ -50,7 +50,7 @@ class IrregularWebcomic(_BasicScraper):
|
||||||
help = 'Index format: nnn'
|
help = 'Index format: nnn'
|
||||||
|
|
||||||
|
|
||||||
class IslaAukate(_ParserScraper):
|
class IslaAukate(ParserScraper):
|
||||||
url = 'https://overlordcomic.com/archive/default/latest'
|
url = 'https://overlordcomic.com/archive/default/latest'
|
||||||
stripUrl = 'https://overlordcomic.com/archive/default/pages/%s'
|
stripUrl = 'https://overlordcomic.com/archive/default/pages/%s'
|
||||||
firstStripUrl = stripUrl % '001'
|
firstStripUrl = stripUrl % '001'
|
||||||
|
@ -62,7 +62,7 @@ class IslaAukate(_ParserScraper):
|
||||||
return filename.rsplit('_', 1)[0] + '.' + filename.rsplit('.', 1)[-1]
|
return filename.rsplit('_', 1)[0] + '.' + filename.rsplit('.', 1)[-1]
|
||||||
|
|
||||||
|
|
||||||
class IslaAukateColor(_ParserScraper):
|
class IslaAukateColor(ParserScraper):
|
||||||
url = 'https://overlordcomic.com/archive/color/latest'
|
url = 'https://overlordcomic.com/archive/color/latest'
|
||||||
stripUrl = 'https://overlordcomic.com/archive/color/pages/%s'
|
stripUrl = 'https://overlordcomic.com/archive/color/pages/%s'
|
||||||
firstStripUrl = stripUrl % '001'
|
firstStripUrl = stripUrl % '001'
|
||||||
|
@ -77,5 +77,5 @@ class IslaAukateColor(_ParserScraper):
|
||||||
return filename.rsplit('_', 1)[0] + '.' + filename.rsplit('.', 1)[-1]
|
return filename.rsplit('_', 1)[0] + '.' + filename.rsplit('.', 1)[-1]
|
||||||
|
|
||||||
|
|
||||||
class ItsWalky(_WordPressScraper):
|
class ItsWalky(WordPressScraper):
|
||||||
url = 'http://www.itswalky.com/'
|
url = 'http://www.itswalky.com/'
|
||||||
|
|
|
@ -4,13 +4,13 @@
|
||||||
# Copyright (C) 2015-2022 Tobias Gruetzmacher
|
# Copyright (C) 2015-2022 Tobias Gruetzmacher
|
||||||
from re import compile, escape
|
from re import compile, escape
|
||||||
|
|
||||||
from ..scraper import _BasicScraper
|
from ..scraper import BasicScraper
|
||||||
from ..util import tagre
|
from ..util import tagre
|
||||||
from ..helpers import indirectStarter
|
from ..helpers import indirectStarter
|
||||||
from .common import _ComicControlScraper
|
from .common import ComicControlScraper
|
||||||
|
|
||||||
|
|
||||||
class JackCannon(_BasicScraper):
|
class JackCannon(BasicScraper):
|
||||||
url = 'http://fancyadventures.com/'
|
url = 'http://fancyadventures.com/'
|
||||||
rurl = escape(url)
|
rurl = escape(url)
|
||||||
stripUrl = url + '%s/'
|
stripUrl = url + '%s/'
|
||||||
|
@ -20,7 +20,7 @@ class JackCannon(_BasicScraper):
|
||||||
help = 'Index format: yyyy/mm/dd/page-nnn'
|
help = 'Index format: yyyy/mm/dd/page-nnn'
|
||||||
|
|
||||||
|
|
||||||
class JimBenton(_BasicScraper):
|
class JimBenton(BasicScraper):
|
||||||
url = 'http://www.jimbenton.com/page14/page14.html'
|
url = 'http://www.jimbenton.com/page14/page14.html'
|
||||||
stripUrl = 'http://www.jimbenton.com/page14/files/JimBentonComic-%s.html'
|
stripUrl = 'http://www.jimbenton.com/page14/files/JimBentonComic-%s.html'
|
||||||
starter = indirectStarter
|
starter = indirectStarter
|
||||||
|
@ -32,7 +32,7 @@ class JimBenton(_BasicScraper):
|
||||||
help = 'Index format: stripname'
|
help = 'Index format: stripname'
|
||||||
|
|
||||||
|
|
||||||
class JoeAndMonkey(_BasicScraper):
|
class JoeAndMonkey(BasicScraper):
|
||||||
url = 'http://www.joeandmonkey.com/'
|
url = 'http://www.joeandmonkey.com/'
|
||||||
stripUrl = url + '%s'
|
stripUrl = url + '%s'
|
||||||
imageSearch = compile(r'"(/comic/[^"]+)"')
|
imageSearch = compile(r'"(/comic/[^"]+)"')
|
||||||
|
@ -40,7 +40,7 @@ class JoeAndMonkey(_BasicScraper):
|
||||||
help = 'Index format: nnn'
|
help = 'Index format: nnn'
|
||||||
|
|
||||||
|
|
||||||
class JohnnyWander(_ComicControlScraper):
|
class JohnnyWander(ComicControlScraper):
|
||||||
imageSearch = ('//ul[d:class("cc-showbig")]/li/@data-src',
|
imageSearch = ('//ul[d:class("cc-showbig")]/li/@data-src',
|
||||||
'//img[@id="cc-comic"]')
|
'//img[@id="cc-comic"]')
|
||||||
url = 'http://www.johnnywander.com/'
|
url = 'http://www.johnnywander.com/'
|
||||||
|
|
|
@ -5,11 +5,11 @@
|
||||||
# Copyright (C) 2019-2020 Daniel Ring
|
# Copyright (C) 2019-2020 Daniel Ring
|
||||||
from re import compile, IGNORECASE
|
from re import compile, IGNORECASE
|
||||||
|
|
||||||
from ..scraper import _BasicScraper, _ParserScraper
|
from ..scraper import BasicScraper, ParserScraper
|
||||||
from .common import _ComicControlScraper, _WordPressScraper, _WPNavi, _WPWebcomic
|
from .common import ComicControlScraper, WordPressScraper, WordPressNavi, WordPressWebcomic
|
||||||
|
|
||||||
|
|
||||||
class Kaspall(_ParserScraper):
|
class Kaspall(ParserScraper):
|
||||||
stripUrl = 'http://www.kaspall.com/comic/%s'
|
stripUrl = 'http://www.kaspall.com/comic/%s'
|
||||||
url = stripUrl % '2015/10/11'
|
url = stripUrl % '2015/10/11'
|
||||||
firstStripUrl = '2004/08/05'
|
firstStripUrl = '2004/08/05'
|
||||||
|
@ -18,7 +18,7 @@ class Kaspall(_ParserScraper):
|
||||||
endOfLife = True
|
endOfLife = True
|
||||||
|
|
||||||
|
|
||||||
class KevinAndKell(_BasicScraper):
|
class KevinAndKell(BasicScraper):
|
||||||
url = 'http://www.kevinandkell.com/'
|
url = 'http://www.kevinandkell.com/'
|
||||||
stripUrl = url + '%s/kk%s%s.html'
|
stripUrl = url + '%s/kk%s%s.html'
|
||||||
firstStripUrl = stripUrl % ('1995', '09', '03')
|
firstStripUrl = stripUrl % ('1995', '09', '03')
|
||||||
|
@ -33,31 +33,31 @@ class KevinAndKell(_BasicScraper):
|
||||||
return self.stripUrl % tuple(map(int, index.split('-')))
|
return self.stripUrl % tuple(map(int, index.split('-')))
|
||||||
|
|
||||||
|
|
||||||
class KickInTheHead(_WPNavi):
|
class KickInTheHead(WordPressNavi):
|
||||||
url = 'http://www.kickinthehead.org/'
|
url = 'http://www.kickinthehead.org/'
|
||||||
firstStripUrl = url + '2003/03/20/ipod-envy/'
|
firstStripUrl = url + '2003/03/20/ipod-envy/'
|
||||||
|
|
||||||
|
|
||||||
class KillSixBillionDemons(_WPNavi):
|
class KillSixBillionDemons(WordPressNavi):
|
||||||
url = 'http://killsixbilliondemons.com/'
|
url = 'http://killsixbilliondemons.com/'
|
||||||
firstStripUrl = url + 'comic/kill-six-billion-demons-chapter-1/'
|
firstStripUrl = url + 'comic/kill-six-billion-demons-chapter-1/'
|
||||||
multipleImagesPerStrip = True
|
multipleImagesPerStrip = True
|
||||||
adult = True
|
adult = True
|
||||||
|
|
||||||
|
|
||||||
class Kitfox(_WordPressScraper):
|
class Kitfox(WordPressScraper):
|
||||||
url = 'http://www.kitfox.com/wordpress/'
|
url = 'http://www.kitfox.com/wordpress/'
|
||||||
stripUrl = url + '?comic=%s'
|
stripUrl = url + '?comic=%s'
|
||||||
firstStripUrl = stripUrl % 'the-adventure-begins-almost'
|
firstStripUrl = stripUrl % 'the-adventure-begins-almost'
|
||||||
|
|
||||||
|
|
||||||
class KiwiBlitz(_ComicControlScraper):
|
class KiwiBlitz(ComicControlScraper):
|
||||||
url = 'http://www.kiwiblitz.com/'
|
url = 'http://www.kiwiblitz.com/'
|
||||||
stripUrl = url + 'comic/%s'
|
stripUrl = url + 'comic/%s'
|
||||||
firstStripUrl = stripUrl % 'welcome-to-kb'
|
firstStripUrl = stripUrl % 'welcome-to-kb'
|
||||||
|
|
||||||
|
|
||||||
class Krakow(_BasicScraper):
|
class Krakow(BasicScraper):
|
||||||
url = 'http://www.krakow.krakowstudios.com/'
|
url = 'http://www.krakow.krakowstudios.com/'
|
||||||
stripUrl = url + 'archive.php?date=%s'
|
stripUrl = url + 'archive.php?date=%s'
|
||||||
firstStripUrl = stripUrl % '20081111'
|
firstStripUrl = stripUrl % '20081111'
|
||||||
|
@ -67,7 +67,7 @@ class Krakow(_BasicScraper):
|
||||||
help = 'Index format: yyyymmdd'
|
help = 'Index format: yyyymmdd'
|
||||||
|
|
||||||
|
|
||||||
class KuroShouri(_WPWebcomic):
|
class KuroShouri(WordPressWebcomic):
|
||||||
url = 'http://kuroshouri.com/'
|
url = 'http://kuroshouri.com/'
|
||||||
stripUrl = url + 'kuroshouri/%s/'
|
stripUrl = url + 'kuroshouri/%s/'
|
||||||
firstStripUrl = stripUrl % 'kuro-shouri'
|
firstStripUrl = stripUrl % 'kuro-shouri'
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
||||||
# Copyright (C) 2012-2014 Bastian Kleineidam
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
# Copyright (C) 2015-2020 Tobias Gruetzmacher
|
# Copyright (C) 2015-2022 Tobias Gruetzmacher
|
||||||
# Copyright (C) 2019-2020 Daniel Ring
|
# Copyright (C) 2019-2020 Daniel Ring
|
||||||
from ..scraper import _ParserScraper
|
from ..scraper import ParserScraper
|
||||||
|
|
||||||
|
|
||||||
class KeenSpot(_ParserScraper):
|
class KeenSpot(ParserScraper):
|
||||||
multipleImagesPerStrip = True
|
multipleImagesPerStrip = True
|
||||||
imageSearch = (
|
imageSearch = (
|
||||||
'//img[contains(@src, "/comics/")]',
|
'//img[contains(@src, "/comics/")]',
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
# Copyright (C) 2019-2022 Tobias Gruetzmacher
|
# Copyright (C) 2019-2022 Tobias Gruetzmacher
|
||||||
# Copyright (C) 2019-2020 Daniel Ring
|
# Copyright (C) 2019-2020 Daniel Ring
|
||||||
from ..scraper import _ParserScraper
|
from ..scraper import ParserScraper
|
||||||
|
|
||||||
|
|
||||||
class KemonoCafe(_ParserScraper):
|
class KemonoCafe(ParserScraper):
|
||||||
imageSearch = '//div[@id="comic"]//img'
|
imageSearch = '//div[@id="comic"]//img'
|
||||||
prevSearch = '//a[contains(@class, "comic-nav-previous")]'
|
prevSearch = '//a[contains(@class, "comic-nav-previous")]'
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
# Copyright (C) 2021 Tobias Gruetzmacher
|
# Copyright (C) 2021 Tobias Gruetzmacher
|
||||||
from .common import _WordPressScraper
|
from .common import WordPressScraper
|
||||||
|
|
||||||
|
|
||||||
class KrisStraub(_WordPressScraper):
|
class KrisStraub(WordPressScraper):
|
||||||
prevSearch = '//a[text()="Previous"]'
|
prevSearch = '//a[text()="Previous"]'
|
||||||
endOfLife = True
|
endOfLife = True
|
||||||
help = 'Index format: yyyymmdd'
|
help = 'Index format: yyyymmdd'
|
||||||
|
|
|
@ -8,7 +8,7 @@ from re import compile
|
||||||
from ..scraper import _BasicScraper, _ParserScraper
|
from ..scraper import _BasicScraper, _ParserScraper
|
||||||
from ..helpers import bounceStarter, indirectStarter
|
from ..helpers import bounceStarter, indirectStarter
|
||||||
from ..util import tagre
|
from ..util import tagre
|
||||||
from .common import _ComicControlScraper, _WordPressScraper, _WPNaviIn
|
from .common import ComicControlScraper, WordPressScraper, WordPressNaviIn
|
||||||
|
|
||||||
|
|
||||||
class Lackadaisy(_ParserScraper):
|
class Lackadaisy(_ParserScraper):
|
||||||
|
@ -28,7 +28,7 @@ class Lackadaisy(_ParserScraper):
|
||||||
return 'lackadaisy_%s.%s' % (num, ext)
|
return 'lackadaisy_%s.%s' % (num, ext)
|
||||||
|
|
||||||
|
|
||||||
class LastResort(_WordPressScraper):
|
class LastResort(WordPressScraper):
|
||||||
url = 'http://www.lastres0rt.com/'
|
url = 'http://www.lastres0rt.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % 'that-sound-you-hear-is-a-shattered-stereotype'
|
firstStripUrl = stripUrl % 'that-sound-you-hear-is-a-shattered-stereotype'
|
||||||
|
@ -68,11 +68,11 @@ class LeastICouldDo(_ParserScraper):
|
||||||
help = 'Index format: yyyymmdd'
|
help = 'Index format: yyyymmdd'
|
||||||
|
|
||||||
|
|
||||||
class LetsSpeakEnglish(_ComicControlScraper):
|
class LetsSpeakEnglish(ComicControlScraper):
|
||||||
url = 'http://www.marycagle.com'
|
url = 'http://www.marycagle.com'
|
||||||
|
|
||||||
|
|
||||||
class LifeAintNoPonyFarm(_WordPressScraper):
|
class LifeAintNoPonyFarm(WordPressScraper):
|
||||||
url = ('https://web.archive.org/web/20181221154155/'
|
url = ('https://web.archive.org/web/20181221154155/'
|
||||||
'http://sarahburrini.com/en/')
|
'http://sarahburrini.com/en/')
|
||||||
firstStripUrl = url + 'comic/my-first-webcomic/'
|
firstStripUrl = url + 'comic/my-first-webcomic/'
|
||||||
|
@ -137,7 +137,7 @@ class LifeAsRendered(_ParserScraper):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
class LilithsWord(_ComicControlScraper):
|
class LilithsWord(ComicControlScraper):
|
||||||
url = 'http://www.lilithword.com/'
|
url = 'http://www.lilithword.com/'
|
||||||
stripUrl = url + 'comic/%s'
|
stripUrl = url + 'comic/%s'
|
||||||
firstStripUrl = stripUrl % 'prologue-page-00'
|
firstStripUrl = stripUrl % 'prologue-page-00'
|
||||||
|
@ -188,7 +188,7 @@ class LoadingArtist(_ParserScraper):
|
||||||
prevSearch = "//a[contains(concat(' ', @class, ' '), ' prev ')]"
|
prevSearch = "//a[contains(concat(' ', @class, ' '), ' prev ')]"
|
||||||
|
|
||||||
|
|
||||||
class LoFiJinks(_WPNaviIn):
|
class LoFiJinks(WordPressNaviIn):
|
||||||
baseUrl = 'https://hijinksensue.com/comic/'
|
baseUrl = 'https://hijinksensue.com/comic/'
|
||||||
url = baseUrl + 'learning-to-love-again/'
|
url = baseUrl + 'learning-to-love-again/'
|
||||||
firstStripUrl = baseUrl + 'lo-fijinks-everything-i-know-anout-james-camerons-avatar-movie/'
|
firstStripUrl = baseUrl + 'lo-fijinks-everything-i-know-anout-james-camerons-avatar-movie/'
|
||||||
|
|
|
@ -10,7 +10,7 @@ from ..helpers import indirectStarter
|
||||||
from ..scraper import _BasicScraper, _ParserScraper
|
from ..scraper import _BasicScraper, _ParserScraper
|
||||||
from ..util import tagre
|
from ..util import tagre
|
||||||
from ..xml import NS
|
from ..xml import NS
|
||||||
from .common import _ComicControlScraper, _WordPressScraper, _WPWebcomic
|
from .common import ComicControlScraper, WordPressScraper, WordPressWebcomic
|
||||||
|
|
||||||
|
|
||||||
class MacHall(_BasicScraper):
|
class MacHall(_BasicScraper):
|
||||||
|
@ -29,12 +29,12 @@ class MadamAndEve(_BasicScraper):
|
||||||
multipleImagesPerStrip = True
|
multipleImagesPerStrip = True
|
||||||
|
|
||||||
|
|
||||||
class Magellan(_WordPressScraper):
|
class Magellan(WordPressScraper):
|
||||||
url = 'https://magellanverse.com/'
|
url = 'https://magellanverse.com/'
|
||||||
firstStripUrl = url + 'comic/20040307wannabe/'
|
firstStripUrl = url + 'comic/20040307wannabe/'
|
||||||
|
|
||||||
|
|
||||||
class MagickChicks(_ComicControlScraper):
|
class MagickChicks(ComicControlScraper):
|
||||||
url = 'https://pixietrixcomix.com/magick-chicks/'
|
url = 'https://pixietrixcomix.com/magick-chicks/'
|
||||||
stripUrl = url + '%s'
|
stripUrl = url + '%s'
|
||||||
firstStripUrl = stripUrl % 'tis-but-a-trifle-2'
|
firstStripUrl = stripUrl % 'tis-but-a-trifle-2'
|
||||||
|
@ -52,7 +52,7 @@ class ManlyGuysDoingManlyThings(_ParserScraper):
|
||||||
help = 'Index format: ddmmyyyy'
|
help = 'Index format: ddmmyyyy'
|
||||||
|
|
||||||
|
|
||||||
class MareInternum(_WordPressScraper):
|
class MareInternum(WordPressScraper):
|
||||||
url = 'https://www.marecomic.com/'
|
url = 'https://www.marecomic.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % 'intro-page-1'
|
firstStripUrl = stripUrl % 'intro-page-1'
|
||||||
|
@ -98,7 +98,7 @@ class MaxOveracts(_ParserScraper):
|
||||||
help = 'Index format: nnn'
|
help = 'Index format: nnn'
|
||||||
|
|
||||||
|
|
||||||
class Meek(_WordPressScraper):
|
class Meek(WordPressScraper):
|
||||||
url = 'https://www.meekcomic.com/'
|
url = 'https://www.meekcomic.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % 'chapter-1-cover'
|
firstStripUrl = stripUrl % 'chapter-1-cover'
|
||||||
|
@ -113,27 +113,27 @@ class MegaTokyo(_BasicScraper):
|
||||||
help = 'Index format: nnnn'
|
help = 'Index format: nnnn'
|
||||||
|
|
||||||
|
|
||||||
class Meiosis(_WordPressScraper):
|
class Meiosis(WordPressScraper):
|
||||||
url = 'http://meiosiswebcomic.com/'
|
url = 'http://meiosiswebcomic.com/'
|
||||||
|
|
||||||
|
|
||||||
class Melonpool(_WordPressScraper):
|
class Melonpool(WordPressScraper):
|
||||||
url = 'http://www.melonpool.com/'
|
url = 'http://www.melonpool.com/'
|
||||||
allow_errors = (500,)
|
allow_errors = (500,)
|
||||||
|
|
||||||
|
|
||||||
class MenageA3(_ComicControlScraper):
|
class MenageA3(ComicControlScraper):
|
||||||
adult = True
|
adult = True
|
||||||
url = 'https://pixietrixcomix.com/menage-a-3/'
|
url = 'https://pixietrixcomix.com/menage-a-3/'
|
||||||
firstStripUrl = url + 'for-new-readers'
|
firstStripUrl = url + 'for-new-readers'
|
||||||
endOfLife = True
|
endOfLife = True
|
||||||
|
|
||||||
|
|
||||||
class Metacarpolis(_ComicControlScraper):
|
class Metacarpolis(ComicControlScraper):
|
||||||
url = 'http://www.metacarpolis.com'
|
url = 'http://www.metacarpolis.com'
|
||||||
|
|
||||||
|
|
||||||
class Misfile(_ComicControlScraper):
|
class Misfile(ComicControlScraper):
|
||||||
url = 'http://www.misfile.com/misfile/'
|
url = 'http://www.misfile.com/misfile/'
|
||||||
stripUrl = url + '%s'
|
stripUrl = url + '%s'
|
||||||
firstStripUrl = stripUrl % '2004-02-22'
|
firstStripUrl = stripUrl % '2004-02-22'
|
||||||
|
@ -149,7 +149,7 @@ class MisfileHellHigh(Misfile):
|
||||||
help = 'Index format: yyyy-mm-dd'
|
help = 'Index format: yyyy-mm-dd'
|
||||||
|
|
||||||
|
|
||||||
class MistyTheMouse(_WordPressScraper):
|
class MistyTheMouse(WordPressScraper):
|
||||||
url = 'http://www.mistythemouse.com/'
|
url = 'http://www.mistythemouse.com/'
|
||||||
prevSearch = '//a[@rel="prev"]'
|
prevSearch = '//a[@rel="prev"]'
|
||||||
firstStripUrl = 'http://www.mistythemouse.com/?p=12'
|
firstStripUrl = 'http://www.mistythemouse.com/?p=12'
|
||||||
|
@ -176,13 +176,13 @@ class MonsieurLeChien(_BasicScraper):
|
||||||
help = 'Index format: n'
|
help = 'Index format: n'
|
||||||
|
|
||||||
|
|
||||||
class MonsterSoup(_WordPressScraper):
|
class MonsterSoup(WordPressScraper):
|
||||||
url = 'https://monstersoupcomic.com/'
|
url = 'https://monstersoupcomic.com/'
|
||||||
stripUrl = url + '?comic=%s'
|
stripUrl = url + '?comic=%s'
|
||||||
firstStripUrl = stripUrl % 'chapter-1-cover'
|
firstStripUrl = stripUrl % 'chapter-1-cover'
|
||||||
|
|
||||||
|
|
||||||
class Moonlace(_WPWebcomic):
|
class Moonlace(WordPressWebcomic):
|
||||||
url = 'https://moonlace.darkbluecomics.com/'
|
url = 'https://moonlace.darkbluecomics.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % 'page-0-1'
|
firstStripUrl = stripUrl % 'page-0-1'
|
||||||
|
@ -272,7 +272,7 @@ class MysteriesOfTheArcana(_ParserScraper):
|
||||||
prevSearch = '//a[@class="navprevious"]'
|
prevSearch = '//a[@class="navprevious"]'
|
||||||
|
|
||||||
|
|
||||||
class MonsterUnderTheBed(_WordPressScraper):
|
class MonsterUnderTheBed(WordPressScraper):
|
||||||
url = 'http://themonsterunderthebed.net/'
|
url = 'http://themonsterunderthebed.net/'
|
||||||
stripUrl = url + '?comic=%s'
|
stripUrl = url + '?comic=%s'
|
||||||
firstStripUrl = stripUrl % 'test-post'
|
firstStripUrl = stripUrl % 'test-post'
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
# Copyright (C) 2019-2021 Tobias Gruetzmacher
|
# Copyright (C) 2019-2022 Tobias Gruetzmacher
|
||||||
# Copyright (C) 2019-2020 Daniel Ring
|
# Copyright (C) 2019-2020 Daniel Ring
|
||||||
import json
|
import json
|
||||||
|
|
||||||
from ..scraper import _ParserScraper
|
from ..scraper import ParserScraper
|
||||||
|
|
||||||
|
|
||||||
class MangaDex(_ParserScraper):
|
class MangaDex(ParserScraper):
|
||||||
multipleImagesPerStrip = True
|
multipleImagesPerStrip = True
|
||||||
|
|
||||||
def __init__(self, name, mangaId):
|
def __init__(self, name, mangaId):
|
||||||
super(MangaDex, self).__init__('MangaDex/' + name)
|
super().__init__('MangaDex/' + name)
|
||||||
|
|
||||||
baseUrl = 'https://api.mangadex.org/'
|
baseUrl = 'https://api.mangadex.org/'
|
||||||
self.url = baseUrl + 'manga/%s' % mangaId
|
self.url = baseUrl + 'manga/%s' % mangaId
|
||||||
|
|
|
@ -8,10 +8,10 @@ from re import compile, escape
|
||||||
from ..scraper import _BasicScraper, _ParserScraper
|
from ..scraper import _BasicScraper, _ParserScraper
|
||||||
from ..helpers import indirectStarter, bounceStarter
|
from ..helpers import indirectStarter, bounceStarter
|
||||||
from ..util import tagre
|
from ..util import tagre
|
||||||
from .common import _ComicControlScraper, _WordPressScraper, _WPNavi, _WPWebcomic
|
from .common import ComicControlScraper, WordPressScraper, WordPressNavi, WordPressWebcomic
|
||||||
|
|
||||||
|
|
||||||
class Namesake(_ComicControlScraper):
|
class Namesake(ComicControlScraper):
|
||||||
url = 'http://namesakecomic.com/'
|
url = 'http://namesakecomic.com/'
|
||||||
stripUrl = url + 'comic/%s'
|
stripUrl = url + 'comic/%s'
|
||||||
firstStripUrl = stripUrl % 'the-journey-begins'
|
firstStripUrl = stripUrl % 'the-journey-begins'
|
||||||
|
@ -32,7 +32,7 @@ class NatalieDee(_BasicScraper):
|
||||||
return '%s-%s' % (date, filename)
|
return '%s-%s' % (date, filename)
|
||||||
|
|
||||||
|
|
||||||
class Nedroid(_WordPressScraper):
|
class Nedroid(WordPressScraper):
|
||||||
url = 'http://nedroid.com/'
|
url = 'http://nedroid.com/'
|
||||||
prevSearch = '//a[@rel="prev"]'
|
prevSearch = '//a[@rel="prev"]'
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ class NeoEarth(_BasicScraper):
|
||||||
help = 'Index format: yyyy-mm-dd'
|
help = 'Index format: yyyy-mm-dd'
|
||||||
|
|
||||||
|
|
||||||
class NerfNow(_WordPressScraper):
|
class NerfNow(WordPressScraper):
|
||||||
url = 'https://www.nerfnow.com/'
|
url = 'https://www.nerfnow.com/'
|
||||||
prevSearch = '//li[@id="nav_previous"]/a'
|
prevSearch = '//li[@id="nav_previous"]/a'
|
||||||
|
|
||||||
|
@ -75,7 +75,7 @@ class Newshounds(_ParserScraper):
|
||||||
return super(Newshounds, self).getPrevUrl(url, data)
|
return super(Newshounds, self).getPrevUrl(url, data)
|
||||||
|
|
||||||
|
|
||||||
class NewWorld(_WordPressScraper):
|
class NewWorld(WordPressScraper):
|
||||||
url = ('https://web.archive.org/web/20190718012133/'
|
url = ('https://web.archive.org/web/20190718012133/'
|
||||||
'http://www.tfsnewworld.com/')
|
'http://www.tfsnewworld.com/')
|
||||||
stripUrl = url + '%s/'
|
stripUrl = url + '%s/'
|
||||||
|
@ -85,7 +85,7 @@ class NewWorld(_WordPressScraper):
|
||||||
help = 'Index format: yyyy/mm/dd/stripn'
|
help = 'Index format: yyyy/mm/dd/stripn'
|
||||||
|
|
||||||
|
|
||||||
class NeverSatisfied(_ComicControlScraper):
|
class NeverSatisfied(ComicControlScraper):
|
||||||
url = 'https://www.neversatisfiedcomic.com/'
|
url = 'https://www.neversatisfiedcomic.com/'
|
||||||
stripUrl = url + 'comic/%s'
|
stripUrl = url + 'comic/%s'
|
||||||
firstStripUrl = stripUrl % 'never-satisfied'
|
firstStripUrl = stripUrl % 'never-satisfied'
|
||||||
|
@ -107,13 +107,13 @@ class NichtLustig(_BasicScraper):
|
||||||
return '%s' % (filename)
|
return '%s' % (filename)
|
||||||
|
|
||||||
|
|
||||||
class Nicky510(_WPNavi):
|
class Nicky510(WordPressNavi):
|
||||||
url = ('https://web.archive.org/web/20160510215718/'
|
url = ('https://web.archive.org/web/20160510215718/'
|
||||||
'http://www.nickyitis.com/')
|
'http://www.nickyitis.com/')
|
||||||
endOfLife = True
|
endOfLife = True
|
||||||
|
|
||||||
|
|
||||||
class Nightshift(_WPWebcomic):
|
class Nightshift(WordPressWebcomic):
|
||||||
url = 'https://poecatcomix.com/nightshift-static/'
|
url = 'https://poecatcomix.com/nightshift-static/'
|
||||||
stripUrl = 'https://poecatcomix.com/nightshift/%s/'
|
stripUrl = 'https://poecatcomix.com/nightshift/%s/'
|
||||||
firstStripUrl = stripUrl % 'ns-cover'
|
firstStripUrl = stripUrl % 'ns-cover'
|
||||||
|
@ -189,7 +189,7 @@ class NonPlayerCharacter(_ParserScraper):
|
||||||
return pageUrl.rstrip('/').rsplit('/', 1)[-1]
|
return pageUrl.rstrip('/').rsplit('/', 1)[-1]
|
||||||
|
|
||||||
|
|
||||||
class NotAVillain(_WPWebcomic):
|
class NotAVillain(WordPressWebcomic):
|
||||||
url = 'http://navcomic.com/'
|
url = 'http://navcomic.com/'
|
||||||
stripUrl = url + 'not-a-villain/%s/'
|
stripUrl = url + 'not-a-villain/%s/'
|
||||||
firstStripUrl = stripUrl % 'v1-001'
|
firstStripUrl = stripUrl % 'v1-001'
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
# Copyright (C) 2019-2020 Tobias Gruetzmacher
|
# Copyright (C) 2019-2022 Tobias Gruetzmacher
|
||||||
# Copyright (C) 2019-2020 Daniel Ring
|
# Copyright (C) 2019-2020 Daniel Ring
|
||||||
from .common import _ParserScraper
|
from ..scraper import ParserScraper
|
||||||
|
|
||||||
|
|
||||||
class NamirDeiter(_ParserScraper):
|
class NamirDeiter(ParserScraper):
|
||||||
imageSearch = '//img[contains(@src, "comics/")]'
|
imageSearch = '//img[contains(@src, "comics/")]'
|
||||||
prevSearch = ('//a[@rel="prev"]',
|
prevSearch = ('//a[@rel="prev"]',
|
||||||
'//a[./img[contains(@src, "previous")]]',
|
'//a[./img[contains(@src, "previous")]]',
|
||||||
|
@ -46,7 +46,7 @@ class NamirDeiter(_ParserScraper):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class UnlikeMinerva(_ParserScraper):
|
class UnlikeMinerva(ParserScraper):
|
||||||
name = 'NamirDeiter/UnlikeMinerva'
|
name = 'NamirDeiter/UnlikeMinerva'
|
||||||
baseUrl = 'https://unlikeminerva.com/archive/index.php'
|
baseUrl = 'https://unlikeminerva.com/archive/index.php'
|
||||||
stripUrl = baseUrl + '?week=%s'
|
stripUrl = baseUrl + '?week=%s'
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
||||||
# Copyright (C) 2012-2014 Bastian Kleineidam
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
# Copyright (C) 2015-2016 Tobias Gruetzmacher
|
# Copyright (C) 2015-2022 Tobias Gruetzmacher
|
||||||
from ..scraper import _ParserScraper
|
from ..scraper import ParserScraper
|
||||||
|
|
||||||
|
|
||||||
class Nitrocosm(_ParserScraper):
|
class Nitrocosm(ParserScraper):
|
||||||
imageSearch = '//img[@class="gallery_display"]'
|
imageSearch = '//img[@class="gallery_display"]'
|
||||||
prevSearch = '//a[@class="nav_btn_previous"]'
|
prevSearch = '//a[@class="nav_btn_previous"]'
|
||||||
|
|
||||||
def __init__(self, name, path):
|
def __init__(self, name, path):
|
||||||
super(Nitrocosm, self).__init__(name)
|
super().__init__(name)
|
||||||
self.url = 'http://www.nitrocosm.com/go/' + path
|
self.url = 'http://www.nitrocosm.com/go/' + path
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|
|
@ -1,38 +1,28 @@
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
||||||
# Copyright (C) 2012-2014 Bastian Kleineidam
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
# Copyright (C) 2015-2016 Tobias Gruetzmacher
|
# Copyright (C) 2015-2022 Tobias Gruetzmacher
|
||||||
from ..scraper import _ParserScraper
|
from ..scraper import ParserScraper
|
||||||
|
from .common import ComicControlScraper
|
||||||
|
|
||||||
|
|
||||||
class _NuklearPower(_ParserScraper):
|
class NuklearPower(ParserScraper):
|
||||||
prevSearch = '//a[@rel="prev"]'
|
prevSearch = '//a[@rel="prev"]'
|
||||||
imageSearch = '//div[@id="comic"]/img'
|
imageSearch = '//div[@id="comic"]/img'
|
||||||
|
|
||||||
def __init__(self, name):
|
def __init__(self, name, path):
|
||||||
super(_NuklearPower, self).__init__('NuklearPower/' + name[2:])
|
super().__init__('NuklearPower/' + name)
|
||||||
|
self.url = 'http://www.nuklearpower.com/' + path + '/'
|
||||||
|
|
||||||
@property
|
@classmethod
|
||||||
def url(self):
|
def getmodules(cls):
|
||||||
return 'http://www.nuklearpower.com/' + self.path + '/'
|
return (
|
||||||
|
cls('8BitTheater', '8-bit-theater'),
|
||||||
|
cls('HowIKilledYourMaster', 'hikym'),
|
||||||
|
cls('TheDreadful', 'dreadful'),
|
||||||
|
cls('Warbot', 'warbot'),
|
||||||
|
)
|
||||||
|
|
||||||
|
class NPAtomicRobo(ComicControlScraper):
|
||||||
class NP8BitTheater(_NuklearPower):
|
name = 'NuklearPower/AtomicRobo'
|
||||||
path = '8-bit-theater'
|
|
||||||
|
|
||||||
|
|
||||||
class NPAtomicRobo(_NuklearPower):
|
|
||||||
url = 'http://www.atomic-robo.com/'
|
url = 'http://www.atomic-robo.com/'
|
||||||
imageSearch = '//img[@id="cc-comic"]'
|
|
||||||
|
|
||||||
|
|
||||||
class NPHowIKilledYourMaster(_NuklearPower):
|
|
||||||
path = 'hikym'
|
|
||||||
|
|
||||||
|
|
||||||
class NPTheDreadful(_NuklearPower):
|
|
||||||
path = 'dreadful'
|
|
||||||
|
|
||||||
|
|
||||||
class NPWarbot(_NuklearPower):
|
|
||||||
path = 'warbot'
|
|
||||||
|
|
|
@ -3,9 +3,9 @@
|
||||||
# Copyright (C) 2012-2014 Bastian Kleineidam
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
# Copyright (C) 2015-2020 Tobias Gruetzmacher
|
# Copyright (C) 2015-2020 Tobias Gruetzmacher
|
||||||
# Copyright (C) 2019-2020 Daniel Ring
|
# Copyright (C) 2019-2020 Daniel Ring
|
||||||
from .common import _WordPressScraper
|
from .common import WordPressScraper
|
||||||
|
|
||||||
|
|
||||||
class NineteenSeventySeven(_WordPressScraper):
|
class NineteenSeventySeven(WordPressScraper):
|
||||||
name = '1977'
|
name = '1977'
|
||||||
url = 'http://1977thecomic.com/'
|
url = 'http://1977thecomic.com/'
|
||||||
|
|
|
@ -8,7 +8,7 @@ from re import compile, escape
|
||||||
from ..helpers import bounceStarter, indirectStarter
|
from ..helpers import bounceStarter, indirectStarter
|
||||||
from ..scraper import _BasicScraper, _ParserScraper
|
from ..scraper import _BasicScraper, _ParserScraper
|
||||||
from ..util import tagre
|
from ..util import tagre
|
||||||
from .common import _WordPressScraper, _WPNavi
|
from .common import WordPressScraper, WordPressNavi
|
||||||
|
|
||||||
|
|
||||||
class OctopusPie(_ParserScraper):
|
class OctopusPie(_ParserScraper):
|
||||||
|
@ -71,7 +71,7 @@ class Oglaf(_ParserScraper):
|
||||||
return urls
|
return urls
|
||||||
|
|
||||||
|
|
||||||
class OhJoySexToy(_WPNavi):
|
class OhJoySexToy(WordPressNavi):
|
||||||
url = 'http://www.ohjoysextoy.com/'
|
url = 'http://www.ohjoysextoy.com/'
|
||||||
firstStripUrl = url + 'introduction/'
|
firstStripUrl = url + 'introduction/'
|
||||||
textSearch = '//div[@id="comic"]//img/@alt'
|
textSearch = '//div[@id="comic"]//img/@alt'
|
||||||
|
@ -99,25 +99,25 @@ class OmakeTheater(_ParserScraper):
|
||||||
help = 'Index format: number (unpadded)'
|
help = 'Index format: number (unpadded)'
|
||||||
|
|
||||||
|
|
||||||
class OnTheEdge(_WordPressScraper):
|
class OnTheEdge(WordPressScraper):
|
||||||
url = 'http://ontheedgecomics.com/'
|
url = 'http://ontheedgecomics.com/'
|
||||||
firstStripUrl = 'http://ontheedgecomics.com/comic/ote0001/'
|
firstStripUrl = 'http://ontheedgecomics.com/comic/ote0001/'
|
||||||
|
|
||||||
|
|
||||||
class OopsComicAdventure(_WordPressScraper):
|
class OopsComicAdventure(WordPressScraper):
|
||||||
url = ('https://web.archive.org/web/20190102215141/'
|
url = ('https://web.archive.org/web/20190102215141/'
|
||||||
'http://oopscomicadventure.com/')
|
'http://oopscomicadventure.com/')
|
||||||
endOfLife = True
|
endOfLife = True
|
||||||
|
|
||||||
|
|
||||||
class Optipess(_WPNavi):
|
class Optipess(WordPressNavi):
|
||||||
url = 'http://www.optipess.com/'
|
url = 'http://www.optipess.com/'
|
||||||
firstStripUrl = url + '2008/12/01/jason-friend-of-the-butterflies/'
|
firstStripUrl = url + '2008/12/01/jason-friend-of-the-butterflies/'
|
||||||
textSearch = '//div[@id="comic"]//img/@alt'
|
textSearch = '//div[@id="comic"]//img/@alt'
|
||||||
textOptional = True
|
textOptional = True
|
||||||
|
|
||||||
|
|
||||||
class OrderOfTheBlackDog(_WordPressScraper):
|
class OrderOfTheBlackDog(WordPressScraper):
|
||||||
url = 'http://orderoftheblackdog.com/'
|
url = 'http://orderoftheblackdog.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % 'issue-1-cover'
|
firstStripUrl = stripUrl % 'issue-1-cover'
|
||||||
|
@ -147,7 +147,7 @@ class OurHomePlanet(_ParserScraper):
|
||||||
help = 'Index format: n (unpadded)'
|
help = 'Index format: n (unpadded)'
|
||||||
|
|
||||||
|
|
||||||
class OutOfPlacers(_WordPressScraper):
|
class OutOfPlacers(WordPressScraper):
|
||||||
url = 'http://www.valsalia.com/'
|
url = 'http://www.valsalia.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % 'prologue/01'
|
firstStripUrl = stripUrl % 'prologue/01'
|
||||||
|
@ -164,7 +164,7 @@ class OverCompensating(_BasicScraper):
|
||||||
help = 'Index format: number'
|
help = 'Index format: number'
|
||||||
|
|
||||||
|
|
||||||
class OzyAndMillie(_WordPressScraper):
|
class OzyAndMillie(WordPressScraper):
|
||||||
stripUrl = 'https://ozyandmillie.org/comic/%s/'
|
stripUrl = 'https://ozyandmillie.org/comic/%s/'
|
||||||
url = stripUrl % 'ozy-and-millie-2131'
|
url = stripUrl % 'ozy-and-millie-2131'
|
||||||
firstStripUrl = stripUrl % 'ozy-and-millie-2'
|
firstStripUrl = stripUrl % 'ozy-and-millie-2'
|
||||||
|
|
|
@ -8,7 +8,7 @@ from re import compile, escape
|
||||||
from ..scraper import _BasicScraper, _ParserScraper
|
from ..scraper import _BasicScraper, _ParserScraper
|
||||||
from ..helpers import bounceStarter, queryNamer, indirectStarter
|
from ..helpers import bounceStarter, queryNamer, indirectStarter
|
||||||
from ..util import tagre
|
from ..util import tagre
|
||||||
from .common import _ComicControlScraper, _WordPressScraper, _WPNavi
|
from .common import ComicControlScraper, WordPressScraper, WordPressNavi
|
||||||
|
|
||||||
|
|
||||||
class PandyLand(_ParserScraper):
|
class PandyLand(_ParserScraper):
|
||||||
|
@ -47,12 +47,12 @@ class ParallelUniversum(_BasicScraper):
|
||||||
lang = 'de'
|
lang = 'de'
|
||||||
|
|
||||||
|
|
||||||
class ParaNatural(_ComicControlScraper):
|
class ParaNatural(ComicControlScraper):
|
||||||
url = 'https://www.paranatural.net/'
|
url = 'https://www.paranatural.net/'
|
||||||
firstStripUrl = url + 'comic/chapter-1'
|
firstStripUrl = url + 'comic/chapter-1'
|
||||||
|
|
||||||
|
|
||||||
class PartiallyClips(_WordPressScraper):
|
class PartiallyClips(WordPressScraper):
|
||||||
url = ('https://web.archive.org/web/20180509161332/'
|
url = ('https://web.archive.org/web/20180509161332/'
|
||||||
'http://partiallyclips.com/')
|
'http://partiallyclips.com/')
|
||||||
firstStripUrl = url + 'comic/screaming-woman/'
|
firstStripUrl = url + 'comic/screaming-woman/'
|
||||||
|
@ -117,7 +117,7 @@ class PennyArcade(_ParserScraper):
|
||||||
help = 'Index format: yyyy/mm/dd'
|
help = 'Index format: yyyy/mm/dd'
|
||||||
|
|
||||||
|
|
||||||
class PeppermintSaga(_WPNavi):
|
class PeppermintSaga(WordPressNavi):
|
||||||
url = 'http://www.pepsaga.com/'
|
url = 'http://www.pepsaga.com/'
|
||||||
stripUrl = url + '?p=%s'
|
stripUrl = url + '?p=%s'
|
||||||
firstStripUrl = stripUrl % '3'
|
firstStripUrl = stripUrl % '3'
|
||||||
|
@ -125,7 +125,7 @@ class PeppermintSaga(_WPNavi):
|
||||||
adult = True
|
adult = True
|
||||||
|
|
||||||
|
|
||||||
class PeppermintSagaBGR(_WPNavi):
|
class PeppermintSagaBGR(WordPressNavi):
|
||||||
url = 'http://bgr.pepsaga.com/'
|
url = 'http://bgr.pepsaga.com/'
|
||||||
stripUrl = url + '?p=%s'
|
stripUrl = url + '?p=%s'
|
||||||
firstStripUrl = stripUrl % '4'
|
firstStripUrl = stripUrl % '4'
|
||||||
|
@ -176,11 +176,11 @@ class PHDComics(_ParserScraper):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class Picklewhistle(_ComicControlScraper):
|
class Picklewhistle(ComicControlScraper):
|
||||||
url = 'http://www.picklewhistle.com/'
|
url = 'http://www.picklewhistle.com/'
|
||||||
|
|
||||||
|
|
||||||
class PicPakDog(_WordPressScraper):
|
class PicPakDog(WordPressScraper):
|
||||||
url = 'http://www.picpak.net/'
|
url = 'http://www.picpak.net/'
|
||||||
firstStripUrl = url + 'comic/dogs-cant-spell/'
|
firstStripUrl = url + 'comic/dogs-cant-spell/'
|
||||||
|
|
||||||
|
@ -243,7 +243,7 @@ class PoorlyDrawnLines(_ParserScraper):
|
||||||
prevSearch = '//a[@rel="prev"]'
|
prevSearch = '//a[@rel="prev"]'
|
||||||
|
|
||||||
|
|
||||||
class PoppyOPossum(_WordPressScraper):
|
class PoppyOPossum(WordPressScraper):
|
||||||
baseUrl = 'https://www.poppy-opossum.com/'
|
baseUrl = 'https://www.poppy-opossum.com/'
|
||||||
url = baseUrl + '?latest'
|
url = baseUrl + '?latest'
|
||||||
stripUrl = baseUrl + 'comic/%s'
|
stripUrl = baseUrl + 'comic/%s'
|
||||||
|
@ -274,7 +274,7 @@ class Precocious(_ParserScraper):
|
||||||
help = 'Index format: yyyy/mm/dd'
|
help = 'Index format: yyyy/mm/dd'
|
||||||
|
|
||||||
|
|
||||||
class PrinceOfSartar(_WPNavi):
|
class PrinceOfSartar(WordPressNavi):
|
||||||
url = 'http://www.princeofsartar.com/'
|
url = 'http://www.princeofsartar.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % 'introduction-chapter-1'
|
firstStripUrl = stripUrl % 'introduction-chapter-1'
|
||||||
|
@ -289,7 +289,7 @@ class PrinceOfSartar(_WPNavi):
|
||||||
return '%s.%s' % (title, image_ext)
|
return '%s.%s' % (title, image_ext)
|
||||||
|
|
||||||
|
|
||||||
class ProphecyOfTheCircle(_WPNavi):
|
class ProphecyOfTheCircle(WordPressNavi):
|
||||||
url = 'https://www.prophecyofthecircle.com/'
|
url = 'https://www.prophecyofthecircle.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % 'prologue'
|
firstStripUrl = stripUrl % 'prologue'
|
||||||
|
|
|
@ -3,10 +3,10 @@
|
||||||
# Copyright (C) 2012-2014 Bastian Kleineidam
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
# Copyright (C) 2015-2020 Tobias Gruetzmacher
|
# Copyright (C) 2015-2020 Tobias Gruetzmacher
|
||||||
# Copyright (C) 2019-2020 Daniel Ring
|
# Copyright (C) 2019-2020 Daniel Ring
|
||||||
from .common import _WordPressScraper, _WPNavi
|
from .common import WordPressScraper, WordPressNavi
|
||||||
|
|
||||||
|
|
||||||
class PetiteSymphony(_WPNavi):
|
class PetiteSymphony(WordPressNavi):
|
||||||
multipleImagesPerStrip = True
|
multipleImagesPerStrip = True
|
||||||
help = 'Index format: named number'
|
help = 'Index format: named number'
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ class PetiteSymphony(_WPNavi):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class ComicsBreak(_WordPressScraper):
|
class ComicsBreak(WordPressScraper):
|
||||||
def __init__(self, name, archive=None, adult=False):
|
def __init__(self, name, archive=None, adult=False):
|
||||||
super(ComicsBreak, self).__init__('ComicsBreak/' + name)
|
super(ComicsBreak, self).__init__('ComicsBreak/' + name)
|
||||||
self.url = 'http://%s.comicsbreak.com/' % name.lower()
|
self.url = 'http://%s.comicsbreak.com/' % name.lower()
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
# Copyright (C) 2019-2020 Tobias Gruetzmacher
|
# Copyright (C) 2019-2022 Tobias Gruetzmacher
|
||||||
# Copyright (C) 2019-2020 Daniel Ring
|
# Copyright (C) 2019-2020 Daniel Ring
|
||||||
from .common import _ParserScraper
|
from ..scraper import ParserScraper
|
||||||
|
|
||||||
|
|
||||||
class ProjectFuture(_ParserScraper):
|
class ProjectFuture(ParserScraper):
|
||||||
imageSearch = '//td[@class="tamid"]/img'
|
imageSearch = '//td[@class="tamid"]/img'
|
||||||
prevSearch = '//a[./img[@alt="Previous"]]'
|
prevSearch = '//a[./img[@alt="Previous"]]'
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
||||||
# Copyright (C) 2012-2014 Bastian Kleineidam
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
# Copyright (C) 2015-2020 Tobias Gruetzmacher
|
# Copyright (C) 2015-2022 Tobias Gruetzmacher
|
||||||
# Copyright (C) 2019-2020 Daniel Ring
|
# Copyright (C) 2019-2020 Daniel Ring
|
||||||
from ..scraper import _ParserScraper
|
from ..scraper import ParserScraper
|
||||||
|
|
||||||
|
|
||||||
class QuantumVibe(_ParserScraper):
|
class QuantumVibe(ParserScraper):
|
||||||
url = 'https://www.quantumvibe.com/'
|
url = 'https://www.quantumvibe.com/'
|
||||||
stripUrl = url + 'strip?page=%s'
|
stripUrl = url + 'strip?page=%s'
|
||||||
firstStripUrl = stripUrl % '1'
|
firstStripUrl = stripUrl % '1'
|
||||||
|
@ -14,7 +14,7 @@ class QuantumVibe(_ParserScraper):
|
||||||
prevSearch = '//a[./img[@alt="Previous Strip"]]'
|
prevSearch = '//a[./img[@alt="Previous Strip"]]'
|
||||||
|
|
||||||
|
|
||||||
class QuestionableContent(_ParserScraper):
|
class QuestionableContent(ParserScraper):
|
||||||
url = 'http://www.questionablecontent.net/'
|
url = 'http://www.questionablecontent.net/'
|
||||||
stripUrl = url + 'view.php?comic=%s'
|
stripUrl = url + 'view.php?comic=%s'
|
||||||
firstStripUrl = stripUrl % '1'
|
firstStripUrl = stripUrl % '1'
|
||||||
|
@ -23,7 +23,7 @@ class QuestionableContent(_ParserScraper):
|
||||||
help = 'Index format: n (unpadded)'
|
help = 'Index format: n (unpadded)'
|
||||||
|
|
||||||
|
|
||||||
class Qwantz(_ParserScraper):
|
class Qwantz(ParserScraper):
|
||||||
url = 'http://www.qwantz.com/index.php'
|
url = 'http://www.qwantz.com/index.php'
|
||||||
stripUrl = url + '?comic=%s'
|
stripUrl = url + '?comic=%s'
|
||||||
firstStripUrl = stripUrl % '1'
|
firstStripUrl = stripUrl % '1'
|
||||||
|
|
|
@ -9,14 +9,14 @@ from urllib.parse import urljoin
|
||||||
from ..helpers import bounceStarter
|
from ..helpers import bounceStarter
|
||||||
from ..scraper import _BasicScraper, _ParserScraper
|
from ..scraper import _BasicScraper, _ParserScraper
|
||||||
from ..util import tagre
|
from ..util import tagre
|
||||||
from .common import _WordPressScraper, _WPNavi, _WPWebcomic
|
from .common import WordPressScraper, WordPressNavi, WordPressWebcomic
|
||||||
|
|
||||||
|
|
||||||
class RalfTheDestroyer(_WordPressScraper):
|
class RalfTheDestroyer(WordPressScraper):
|
||||||
url = 'http://ralfthedestroyer.com/'
|
url = 'http://ralfthedestroyer.com/'
|
||||||
|
|
||||||
|
|
||||||
class RayFox(_WPNavi):
|
class RayFox(WordPressNavi):
|
||||||
url = 'https://www.rayfoxthecomic.com/'
|
url = 'https://www.rayfoxthecomic.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % 'not-a-super-hero/it-begins'
|
firstStripUrl = stripUrl % 'not-a-super-hero/it-begins'
|
||||||
|
@ -39,12 +39,12 @@ class RayFox(_WPNavi):
|
||||||
return filename + '.' + ext
|
return filename + '.' + ext
|
||||||
|
|
||||||
|
|
||||||
class RaynaOnTheRiver(_WordPressScraper):
|
class RaynaOnTheRiver(WordPressScraper):
|
||||||
url = 'http://www.catomix.com/rayna/'
|
url = 'http://www.catomix.com/rayna/'
|
||||||
firstStripUrl = url + 'archives/comic/teaser-poster'
|
firstStripUrl = url + 'archives/comic/teaser-poster'
|
||||||
|
|
||||||
|
|
||||||
class RealLife(_WordPressScraper):
|
class RealLife(WordPressScraper):
|
||||||
url = 'https://reallifecomics.com/'
|
url = 'https://reallifecomics.com/'
|
||||||
stripUrl = url + 'comic.php?comic=%s'
|
stripUrl = url + 'comic.php?comic=%s'
|
||||||
firstStripUrl = stripUrl % 'title-1'
|
firstStripUrl = stripUrl % 'title-1'
|
||||||
|
@ -106,7 +106,7 @@ class RedMeat(_ParserScraper):
|
||||||
return '_'.join(parts[1:3])
|
return '_'.join(parts[1:3])
|
||||||
|
|
||||||
|
|
||||||
class Requiem(_WordPressScraper):
|
class Requiem(WordPressScraper):
|
||||||
baseUrl = 'http://requiem.spiderforest.com/'
|
baseUrl = 'http://requiem.spiderforest.com/'
|
||||||
url = baseUrl + '?latest'
|
url = baseUrl + '?latest'
|
||||||
stripUrl = baseUrl + 'comic/%s'
|
stripUrl = baseUrl + 'comic/%s'
|
||||||
|
@ -146,7 +146,7 @@ class Replay(_ParserScraper):
|
||||||
return name
|
return name
|
||||||
|
|
||||||
|
|
||||||
class RiversideExtras(_WPWebcomic):
|
class RiversideExtras(WordPressWebcomic):
|
||||||
url = 'https://riversidecomics.com/'
|
url = 'https://riversidecomics.com/'
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
# Copyright (C) 2019-2020 Tobias Gruetzmacher
|
# Copyright (C) 2019-2022 Tobias Gruetzmacher
|
||||||
# Copyright (C) 2019-2020 Daniel Ring
|
# Copyright (C) 2019-2020 Daniel Ring
|
||||||
from ..scraper import _ParserScraper
|
from ..scraper import ParserScraper
|
||||||
|
|
||||||
|
|
||||||
class RHJunior(_ParserScraper):
|
class RHJunior(ParserScraper):
|
||||||
stripUrl = 'https://www.rhjunior.com/%s/'
|
stripUrl = 'https://www.rhjunior.com/%s/'
|
||||||
imageSearch = '//div[contains(@class, "entry-content")]//img'
|
imageSearch = '//div[contains(@class, "entry-content")]//img'
|
||||||
multipleImagesPerStrip = True
|
multipleImagesPerStrip = True
|
||||||
|
|
|
@ -2,16 +2,16 @@
|
||||||
# Copyright (C) 2019-2020 Tobias Gruetzmacher
|
# Copyright (C) 2019-2020 Tobias Gruetzmacher
|
||||||
# Copyright (C) 2019-2022 Daniel Ring
|
# Copyright (C) 2019-2022 Daniel Ring
|
||||||
from ..helpers import indirectStarter
|
from ..helpers import indirectStarter
|
||||||
from .common import _WordPressScraper, _WPNaviIn
|
from .common import WordPressScraper, WordPressNaviIn
|
||||||
|
|
||||||
|
|
||||||
class Housepets(_WordPressScraper):
|
class Housepets(WordPressScraper):
|
||||||
url = 'http://www.housepetscomic.com/'
|
url = 'http://www.housepetscomic.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = '2008/06/02/when-boredom-strikes'
|
firstStripUrl = '2008/06/02/when-boredom-strikes'
|
||||||
|
|
||||||
|
|
||||||
class RickGriffinStudios(_WPNaviIn):
|
class RickGriffinStudios(WordPressNaviIn):
|
||||||
baseUrl = 'http://rickgriffinstudios.com/'
|
baseUrl = 'http://rickgriffinstudios.com/'
|
||||||
stripUrl = baseUrl + 'comic-post/%s/'
|
stripUrl = baseUrl + 'comic-post/%s/'
|
||||||
latestSearch = '//a[contains(@title, "Permanent Link")]'
|
latestSearch = '//a[contains(@title, "Permanent Link")]'
|
||||||
|
|
|
@ -9,7 +9,7 @@ from os.path import splitext
|
||||||
from ..scraper import _BasicScraper, _ParserScraper
|
from ..scraper import _BasicScraper, _ParserScraper
|
||||||
from ..helpers import indirectStarter, bounceStarter, joinPathPartsNamer
|
from ..helpers import indirectStarter, bounceStarter, joinPathPartsNamer
|
||||||
from ..util import tagre
|
from ..util import tagre
|
||||||
from .common import _ComicControlScraper, _WordPressScraper, _WPNavi, _WPWebcomic
|
from .common import ComicControlScraper, WordPressScraper, WordPressNavi, WordPressWebcomic
|
||||||
|
|
||||||
|
|
||||||
class SabrinaOnline(_BasicScraper):
|
class SabrinaOnline(_BasicScraper):
|
||||||
|
@ -33,17 +33,17 @@ class SabrinaOnline(_BasicScraper):
|
||||||
return archivepages[-1]
|
return archivepages[-1]
|
||||||
|
|
||||||
|
|
||||||
class SafelyEndangered(_WPNavi):
|
class SafelyEndangered(WordPressNavi):
|
||||||
url = 'http://www.safelyendangered.com/'
|
url = 'http://www.safelyendangered.com/'
|
||||||
firstStripUrl = url + 'comic/ignored/'
|
firstStripUrl = url + 'comic/ignored/'
|
||||||
|
|
||||||
|
|
||||||
class SaffronAndSage(_WordPressScraper):
|
class SaffronAndSage(WordPressScraper):
|
||||||
url = 'https://www.saffroncomic.com/'
|
url = 'https://www.saffroncomic.com/'
|
||||||
firstStripUrl = url + 'comic/p0001/'
|
firstStripUrl = url + 'comic/p0001/'
|
||||||
|
|
||||||
|
|
||||||
class SailorsunOrg(_WordPressScraper):
|
class SailorsunOrg(WordPressScraper):
|
||||||
url = 'http://sailorsun.org/'
|
url = 'http://sailorsun.org/'
|
||||||
|
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ class SamAndFuzzy(_ParserScraper):
|
||||||
help = 'Index format: n (unpadded)'
|
help = 'Index format: n (unpadded)'
|
||||||
|
|
||||||
|
|
||||||
class SandraOnTheRocks(_ComicControlScraper):
|
class SandraOnTheRocks(ComicControlScraper):
|
||||||
url = 'https://pixietrixcomix.com/sandra-on-the-rocks/'
|
url = 'https://pixietrixcomix.com/sandra-on-the-rocks/'
|
||||||
stripUrl = url + '%s'
|
stripUrl = url + '%s'
|
||||||
firstStripUrl = stripUrl % 'start-by-running'
|
firstStripUrl = stripUrl % 'start-by-running'
|
||||||
|
@ -64,7 +64,7 @@ class SandraOnTheRocks(_ComicControlScraper):
|
||||||
help = 'Index format: name'
|
help = 'Index format: name'
|
||||||
|
|
||||||
|
|
||||||
class Savestate(_WPNavi):
|
class Savestate(WordPressNavi):
|
||||||
url = 'http://www.savestatecomic.com/'
|
url = 'http://www.savestatecomic.com/'
|
||||||
stripUrl = url + '%s'
|
stripUrl = url + '%s'
|
||||||
firstStripUrl = stripUrl % '2014/02/pokemon-bank'
|
firstStripUrl = stripUrl % '2014/02/pokemon-bank'
|
||||||
|
@ -189,7 +189,7 @@ class ShadesOfGray(_ParserScraper):
|
||||||
return pageUrl.rstrip('/').rsplit('/', 1)[-1]
|
return pageUrl.rstrip('/').rsplit('/', 1)[-1]
|
||||||
|
|
||||||
|
|
||||||
class Sharksplode(_WordPressScraper):
|
class Sharksplode(WordPressScraper):
|
||||||
url = 'http://sharksplode.com/'
|
url = 'http://sharksplode.com/'
|
||||||
textSearch = '//div[@id="comic"]//img/@alt'
|
textSearch = '//div[@id="comic"]//img/@alt'
|
||||||
allow_errors = (403,)
|
allow_errors = (403,)
|
||||||
|
@ -206,13 +206,13 @@ class Sheldon(_BasicScraper):
|
||||||
help = 'Index format: yymmdd'
|
help = 'Index format: yymmdd'
|
||||||
|
|
||||||
|
|
||||||
class Shifters(_WPNavi):
|
class Shifters(WordPressNavi):
|
||||||
url = 'http://shiftersonline.com/'
|
url = 'http://shiftersonline.com/'
|
||||||
stripUrl = url + '%s/'
|
stripUrl = url + '%s/'
|
||||||
firstStripUrl = stripUrl % 'shifters-redux-promo'
|
firstStripUrl = stripUrl % 'shifters-redux-promo'
|
||||||
|
|
||||||
|
|
||||||
class ShipInABottle(_WordPressScraper):
|
class ShipInABottle(WordPressScraper):
|
||||||
url = 'http://shipinbottle.pepsaga.com/'
|
url = 'http://shipinbottle.pepsaga.com/'
|
||||||
stripUrl = url + '?p=%s'
|
stripUrl = url + '?p=%s'
|
||||||
firstStripUrl = stripUrl % '281'
|
firstStripUrl = stripUrl % '281'
|
||||||
|
@ -229,7 +229,7 @@ class Shortpacked(_ParserScraper):
|
||||||
help = 'Index format: nnn'
|
help = 'Index format: nnn'
|
||||||
|
|
||||||
|
|
||||||
class ShotgunShuffle(_WordPressScraper):
|
class ShotgunShuffle(WordPressScraper):
|
||||||
url = 'http://shotgunshuffle.com/'
|
url = 'http://shotgunshuffle.com/'
|
||||||
firstStripUrl = url + 'comic/pilot/'
|
firstStripUrl = url + 'comic/pilot/'
|
||||||
|
|
||||||
|
@ -244,30 +244,30 @@ class SinFest(_ParserScraper):
|
||||||
help = 'Index format: yyyy-mm-dd'
|
help = 'Index format: yyyy-mm-dd'
|
||||||
|
|
||||||
|
|
||||||
class SisterClaire(_ComicControlScraper):
|
class SisterClaire(ComicControlScraper):
|
||||||
url = 'https://www.sisterclaire.com/comic/'
|
url = 'https://www.sisterclaire.com/comic/'
|
||||||
firstStripUrl = url + 'book-one'
|
firstStripUrl = url + 'book-one'
|
||||||
|
|
||||||
|
|
||||||
class SixGunMage(_ComicControlScraper):
|
class SixGunMage(ComicControlScraper):
|
||||||
url = 'http://www.6gunmage.com/comic/'
|
url = 'http://www.6gunmage.com/comic/'
|
||||||
stripUrl = url + '%s'
|
stripUrl = url + '%s'
|
||||||
firstStripUrl = stripUrl % '6-gun-mage-kickoff'
|
firstStripUrl = stripUrl % '6-gun-mage-kickoff'
|
||||||
|
|
||||||
|
|
||||||
class SixPackOfOtters(_WPWebcomic):
|
class SixPackOfOtters(WordPressWebcomic):
|
||||||
url = 'http://sixpackofotters.com/'
|
url = 'http://sixpackofotters.com/'
|
||||||
stripUrl = url + 'pages/%s/'
|
stripUrl = url + 'pages/%s/'
|
||||||
firstStripUrl = stripUrl % 'chapter-01-tandem'
|
firstStripUrl = stripUrl % 'chapter-01-tandem'
|
||||||
|
|
||||||
|
|
||||||
class SkinDeep(_WPWebcomic):
|
class SkinDeep(WordPressWebcomic):
|
||||||
url = 'http://www.skindeepcomic.com/'
|
url = 'http://www.skindeepcomic.com/'
|
||||||
stripUrl = url + 'archive/%s/'
|
stripUrl = url + 'archive/%s/'
|
||||||
firstStripUrl = stripUrl % 'issue-1-cover'
|
firstStripUrl = stripUrl % 'issue-1-cover'
|
||||||
|
|
||||||
|
|
||||||
class SleeplessDomain(_ComicControlScraper):
|
class SleeplessDomain(ComicControlScraper):
|
||||||
url = 'http://www.sleeplessdomain.com/'
|
url = 'http://www.sleeplessdomain.com/'
|
||||||
stripUrl = url + 'comic/%s'
|
stripUrl = url + 'comic/%s'
|
||||||
firstStripUrl = stripUrl % 'chapter-1-cover'
|
firstStripUrl = stripUrl % 'chapter-1-cover'
|
||||||
|
@ -277,7 +277,7 @@ class SleeplessDomain(_ComicControlScraper):
|
||||||
return pageUrl.rsplit('/', 1)[-1] + '.' + imageUrl.rsplit('.', 1)[-1]
|
return pageUrl.rsplit('/', 1)[-1] + '.' + imageUrl.rsplit('.', 1)[-1]
|
||||||
|
|
||||||
|
|
||||||
class SlightlyDamned(_ComicControlScraper):
|
class SlightlyDamned(ComicControlScraper):
|
||||||
url = 'http://www.sdamned.com/'
|
url = 'http://www.sdamned.com/'
|
||||||
firstStripUrl = url + 'comic/prologue'
|
firstStripUrl = url + 'comic/prologue'
|
||||||
|
|
||||||
|
@ -307,7 +307,7 @@ class SluggyFreelance(_ParserScraper):
|
||||||
return imageurl.rsplit('/', 1)[-1].split('.pagespeed', 1)[0]
|
return imageurl.rsplit('/', 1)[-1].split('.pagespeed', 1)[0]
|
||||||
|
|
||||||
|
|
||||||
class SMBC(_ComicControlScraper):
|
class SMBC(ComicControlScraper):
|
||||||
url = 'https://www.smbc-comics.com/'
|
url = 'https://www.smbc-comics.com/'
|
||||||
stripUrl = url + 'comic/%s'
|
stripUrl = url + 'comic/%s'
|
||||||
firstStripUrl = stripUrl % '2002-09-05'
|
firstStripUrl = stripUrl % '2002-09-05'
|
||||||
|
@ -325,7 +325,7 @@ class SMBC(_ComicControlScraper):
|
||||||
return filename
|
return filename
|
||||||
|
|
||||||
|
|
||||||
class SnowFlame(_WordPressScraper):
|
class SnowFlame(WordPressScraper):
|
||||||
url = ('https://web.archive.org/web/20160905071051/'
|
url = ('https://web.archive.org/web/20160905071051/'
|
||||||
'http://www.snowflamecomic.com/')
|
'http://www.snowflamecomic.com/')
|
||||||
stripUrl = url + '?comic=snowflame-%s-%s'
|
stripUrl = url + '?comic=snowflame-%s-%s'
|
||||||
|
@ -346,7 +346,7 @@ class SnowFlame(_WordPressScraper):
|
||||||
return "%s-%s-%s" % (chapter, page, filename)
|
return "%s-%s-%s" % (chapter, page, filename)
|
||||||
|
|
||||||
|
|
||||||
class SodiumEyes(_WordPressScraper):
|
class SodiumEyes(WordPressScraper):
|
||||||
url = 'https://web.archive.org/web/20200220041406/http://sodiumeyes.com/'
|
url = 'https://web.archive.org/web/20200220041406/http://sodiumeyes.com/'
|
||||||
starter = indirectStarter
|
starter = indirectStarter
|
||||||
endOfLife = True
|
endOfLife = True
|
||||||
|
@ -362,7 +362,7 @@ class SomethingPositive(_ParserScraper):
|
||||||
help = 'Index format: mmddyyyy'
|
help = 'Index format: mmddyyyy'
|
||||||
|
|
||||||
|
|
||||||
class Sorcery101(_WPWebcomic):
|
class Sorcery101(WordPressWebcomic):
|
||||||
baseUrl = 'https://kelmcdonald.com/sorcery-101/'
|
baseUrl = 'https://kelmcdonald.com/sorcery-101/'
|
||||||
stripUrl = baseUrl + '%s/'
|
stripUrl = baseUrl + '%s/'
|
||||||
url = stripUrl % 'sorcery101-ch-01'
|
url = stripUrl % 'sorcery101-ch-01'
|
||||||
|
@ -426,11 +426,11 @@ class SpareParts(_BasicScraper):
|
||||||
help = 'Index format: yyyymmdd'
|
help = 'Index format: yyyymmdd'
|
||||||
|
|
||||||
|
|
||||||
class Spinnerette(_ComicControlScraper):
|
class Spinnerette(ComicControlScraper):
|
||||||
url = 'http://www.spinnyverse.com'
|
url = 'http://www.spinnyverse.com'
|
||||||
|
|
||||||
|
|
||||||
class SPQRBlues(_WordPressScraper):
|
class SPQRBlues(WordPressScraper):
|
||||||
url = 'http://spqrblues.com/IV/'
|
url = 'http://spqrblues.com/IV/'
|
||||||
|
|
||||||
|
|
||||||
|
@ -517,7 +517,7 @@ class StarCrossdDestiny(_ParserScraper):
|
||||||
return directory + '-' + filename
|
return directory + '-' + filename
|
||||||
|
|
||||||
|
|
||||||
class StarfireAgency(_WPWebcomic):
|
class StarfireAgency(WordPressWebcomic):
|
||||||
url = 'https://poecatcomix.com/starfire-agency-static/'
|
url = 'https://poecatcomix.com/starfire-agency-static/'
|
||||||
stripUrl = 'https://poecatcomix.com/starfire-agency/%s/'
|
stripUrl = 'https://poecatcomix.com/starfire-agency/%s/'
|
||||||
firstStripUrl = stripUrl % '2005-09-201'
|
firstStripUrl = stripUrl % '2005-09-201'
|
||||||
|
@ -543,7 +543,7 @@ class StarfireAgency(_WPWebcomic):
|
||||||
return filename
|
return filename
|
||||||
|
|
||||||
|
|
||||||
class StarTrip(_ComicControlScraper):
|
class StarTrip(ComicControlScraper):
|
||||||
url = 'https://www.startripcomic.com/'
|
url = 'https://www.startripcomic.com/'
|
||||||
|
|
||||||
|
|
||||||
|
@ -566,11 +566,11 @@ class StickyDillyBuns(_BasicScraper):
|
||||||
help = 'Index format: name'
|
help = 'Index format: name'
|
||||||
|
|
||||||
|
|
||||||
class StreetFighter(_ComicControlScraper):
|
class StreetFighter(ComicControlScraper):
|
||||||
url = 'http://www.streetfightercomics.com'
|
url = 'http://www.streetfightercomics.com'
|
||||||
|
|
||||||
|
|
||||||
class StringTheory(_WPNavi):
|
class StringTheory(WordPressNavi):
|
||||||
url = 'http://www.stringtheorycomic.com/'
|
url = 'http://www.stringtheorycomic.com/'
|
||||||
firstStripUrl = url + 'comics/chapterone/chapterone/'
|
firstStripUrl = url + 'comics/chapterone/chapterone/'
|
||||||
|
|
||||||
|
@ -617,7 +617,7 @@ class SuburbanJungle(_ParserScraper):
|
||||||
prevSearch = '//div[@class="nav-previous"]/a'
|
prevSearch = '//div[@class="nav-previous"]/a'
|
||||||
|
|
||||||
|
|
||||||
class SuburbanJungleRoughHousing(_WordPressScraper):
|
class SuburbanJungleRoughHousing(WordPressScraper):
|
||||||
url = 'http://roughhouse.suburbanjungle.com/'
|
url = 'http://roughhouse.suburbanjungle.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % 'rough-housing-issue-1-cover'
|
firstStripUrl = stripUrl % 'rough-housing-issue-1-cover'
|
||||||
|
@ -632,7 +632,7 @@ class Supercell(_ParserScraper):
|
||||||
prevSearch = '//div[@class="comicnav"]/a[./img[contains(@src, "comnav_02")]]'
|
prevSearch = '//div[@class="comicnav"]/a[./img[contains(@src, "comnav_02")]]'
|
||||||
|
|
||||||
|
|
||||||
class SupernormalStep(_ComicControlScraper):
|
class SupernormalStep(ComicControlScraper):
|
||||||
url = 'http://supernormalstep.com/'
|
url = 'http://supernormalstep.com/'
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,10 +2,10 @@
|
||||||
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
||||||
# Copyright (C) 2012-2014 Bastian Kleineidam
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
# Copyright (C) 2015-2020 Tobias Gruetzmacher
|
# Copyright (C) 2015-2020 Tobias Gruetzmacher
|
||||||
from .common import _WordPressScraper
|
from .common import WordPressScraper
|
||||||
|
|
||||||
|
|
||||||
class SandraAndWoo(_WordPressScraper):
|
class SandraAndWoo(WordPressScraper):
|
||||||
prevSearch = '//a[@rel="prev"]'
|
prevSearch = '//a[@rel="prev"]'
|
||||||
|
|
||||||
def __init__(self, name, urlName, firstUrl, lang='en'):
|
def __init__(self, name, urlName, firstUrl, lang='en'):
|
||||||
|
|
|
@ -1,22 +1,22 @@
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
# Copyright (C) 2019-2021 Tobias Gruetzmacher
|
# Copyright (C) 2019-2021 Tobias Gruetzmacher
|
||||||
# Copyright (C) 2019-2021 Daniel Ring
|
# Copyright (C) 2019-2021 Daniel Ring
|
||||||
from .common import _WordPressSpliced
|
from .common import WordPressSpliced
|
||||||
|
|
||||||
|
|
||||||
class _WithSid(_WordPressSpliced):
|
class _WithSid(WordPressSpliced):
|
||||||
def __init__(self, name, sid, eol=False):
|
def __init__(self, name, sid, eol=False):
|
||||||
super().__init__(name)
|
super().__init__(name)
|
||||||
self.stripUrl = self.baseUrl + 'comic/%s/?sid={}'.format(sid)
|
self.stripUrl = self.baseUrl + 'comic/%s/?sid={}'.format(sid)
|
||||||
|
|
||||||
|
|
||||||
class AbbysAgency(_WordPressSpliced):
|
class AbbysAgency(WordPressSpliced):
|
||||||
url = 'https://abbysagency.us/'
|
url = 'https://abbysagency.us/'
|
||||||
stripUrl = url + 'blog/comic/%s/'
|
stripUrl = url + 'blog/comic/%s/'
|
||||||
firstStripUrl = stripUrl % 'a'
|
firstStripUrl = stripUrl % 'a'
|
||||||
|
|
||||||
|
|
||||||
class AlienDice(_WordPressSpliced):
|
class AlienDice(WordPressSpliced):
|
||||||
url = 'https://aliendice.com/'
|
url = 'https://aliendice.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % '05162001'
|
firstStripUrl = stripUrl % '05162001'
|
||||||
|
@ -32,7 +32,7 @@ class AlienDice(_WordPressSpliced):
|
||||||
return imageUrl.rsplit('/', 1)[-1].replace('20010831', '2001-08-31')
|
return imageUrl.rsplit('/', 1)[-1].replace('20010831', '2001-08-31')
|
||||||
|
|
||||||
|
|
||||||
class AlienDiceLegacy(_WordPressSpliced):
|
class AlienDiceLegacy(WordPressSpliced):
|
||||||
name = 'AlienDice/Legacy'
|
name = 'AlienDice/Legacy'
|
||||||
baseUrl = 'https://aliendice.com/'
|
baseUrl = 'https://aliendice.com/'
|
||||||
url = baseUrl + 'series/legacy/'
|
url = baseUrl + 'series/legacy/'
|
||||||
|
@ -45,7 +45,7 @@ class AlienDiceLegacy(_WordPressSpliced):
|
||||||
return super(AlienDiceLegacy, self).isfirststrip(url.rsplit('?', 1)[0])
|
return super(AlienDiceLegacy, self).isfirststrip(url.rsplit('?', 1)[0])
|
||||||
|
|
||||||
|
|
||||||
class BlackRose(_WordPressSpliced):
|
class BlackRose(WordPressSpliced):
|
||||||
url = 'https://www.blackrose.monster/'
|
url = 'https://www.blackrose.monster/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % '2004-11-01'
|
firstStripUrl = stripUrl % '2004-11-01'
|
||||||
|
@ -80,7 +80,7 @@ class TheCyantianChronicles(_WithSid):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class Shivae(_WordPressSpliced):
|
class Shivae(WordPressSpliced):
|
||||||
url = 'https://shivae.com/'
|
url = 'https://shivae.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % '09202001'
|
firstStripUrl = stripUrl % '09202001'
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
||||||
# Copyright (C) 2012-2014 Bastian Kleineidam
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
# Copyright (C) 2015-2021 Tobias Gruetzmacher
|
# Copyright (C) 2015-2022 Tobias Gruetzmacher
|
||||||
from ..scraper import _ParserScraper
|
from ..scraper import ParserScraper
|
||||||
from ..helpers import indirectStarter
|
from ..helpers import indirectStarter
|
||||||
|
|
||||||
|
|
||||||
class Snafu(_ParserScraper):
|
class Snafu(ParserScraper):
|
||||||
# Next and Previous are swapped...
|
# Next and Previous are swapped...
|
||||||
prevSearch = '//a[@class="next"]'
|
prevSearch = '//a[@class="next"]'
|
||||||
imageSearch = '//div[@class="comicpage"]/img'
|
imageSearch = '//div[@class="comicpage"]/img'
|
||||||
|
@ -14,7 +14,7 @@ class Snafu(_ParserScraper):
|
||||||
starter = indirectStarter
|
starter = indirectStarter
|
||||||
|
|
||||||
def __init__(self, name, path):
|
def __init__(self, name, path):
|
||||||
super(Snafu, self).__init__('SnafuComics/' + name)
|
super().__init__('SnafuComics/' + name)
|
||||||
self.url = 'http://snafu-comics.com/swmseries/' + path
|
self.url = 'http://snafu-comics.com/swmseries/' + path
|
||||||
|
|
||||||
def namer(self, image_url, page_url):
|
def namer(self, image_url, page_url):
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
# Copyright (C) 2019-2020 Tobias Gruetzmacher
|
# Copyright (C) 2019-2022 Tobias Gruetzmacher
|
||||||
# Copyright (C) 2019-2020 Daniel Ring
|
# Copyright (C) 2019-2020 Daniel Ring
|
||||||
from ..scraper import _ParserScraper
|
from ..scraper import ParserScraper
|
||||||
from .common import _WordPressScraper
|
from .common import WordPressScraper
|
||||||
|
|
||||||
|
|
||||||
class StudioKhimera(_ParserScraper):
|
class StudioKhimera(ParserScraper):
|
||||||
imageSearch = '//figure[@class="gallery-item"]//img/@data-src'
|
imageSearch = '//figure[@class="gallery-item"]//img/@data-src'
|
||||||
prevSearch = '//a[@rel="prev"]'
|
prevSearch = '//a[@rel="prev"]'
|
||||||
|
|
||||||
def __init__(self, name, sub, last=None, adult=False, fixNames=False):
|
def __init__(self, name, sub, last=None, adult=False, fixNames=False):
|
||||||
super(StudioKhimera, self).__init__('StudioKhimera/' + name)
|
super().__init__('StudioKhimera/' + name)
|
||||||
|
|
||||||
self.baseUrl = 'https://%s.studiokhimera.com/' % sub
|
self.baseUrl = 'https://%s.studiokhimera.com/' % sub
|
||||||
self.stripUrl = self.baseUrl + '%s/'
|
self.stripUrl = self.baseUrl + '%s/'
|
||||||
|
@ -47,7 +47,7 @@ class StudioKhimera(_ParserScraper):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class UberQuest(_WordPressScraper):
|
class UberQuest(WordPressScraper):
|
||||||
name = 'StudioKhimera/UberQuest'
|
name = 'StudioKhimera/UberQuest'
|
||||||
stripUrl = 'https://uberquest.studiokhimera.com/comic/page/%s/'
|
stripUrl = 'https://uberquest.studiokhimera.com/comic/page/%s/'
|
||||||
url = stripUrl % 'latest'
|
url = stripUrl % 'latest'
|
||||||
|
|
|
@ -12,7 +12,7 @@ except ImportError:
|
||||||
from ..scraper import _BasicScraper, _ParserScraper
|
from ..scraper import _BasicScraper, _ParserScraper
|
||||||
from ..helpers import indirectStarter
|
from ..helpers import indirectStarter
|
||||||
from ..util import tagre
|
from ..util import tagre
|
||||||
from .common import _ComicControlScraper, _WordPressScraper, _WPNavi, _WPWebcomic
|
from .common import ComicControlScraper, WordPressScraper, WordPressNavi, WordPressWebcomic
|
||||||
|
|
||||||
|
|
||||||
class TailsAndTactics(_ParserScraper):
|
class TailsAndTactics(_ParserScraper):
|
||||||
|
@ -23,13 +23,13 @@ class TailsAndTactics(_ParserScraper):
|
||||||
prevSearch = '//a[text()=" Back"]'
|
prevSearch = '//a[text()=" Back"]'
|
||||||
|
|
||||||
|
|
||||||
class TekMage(_WPNavi):
|
class TekMage(WordPressNavi):
|
||||||
url = 'https://tekmagecomic.com/'
|
url = 'https://tekmagecomic.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % 'chapter-1-page-1'
|
firstStripUrl = stripUrl % 'chapter-1-page-1'
|
||||||
|
|
||||||
|
|
||||||
class Tamberlane(_WPWebcomic):
|
class Tamberlane(WordPressWebcomic):
|
||||||
baseUrl = 'https://www.tamberlanecomic.com/'
|
baseUrl = 'https://www.tamberlanecomic.com/'
|
||||||
url = baseUrl + 'latest/'
|
url = baseUrl + 'latest/'
|
||||||
stripUrl = baseUrl + 'tamberlane/%s/'
|
stripUrl = baseUrl + 'tamberlane/%s/'
|
||||||
|
@ -38,7 +38,7 @@ class Tamberlane(_WPWebcomic):
|
||||||
prevSearch = '//a[@class="previous-link"]'
|
prevSearch = '//a[@class="previous-link"]'
|
||||||
|
|
||||||
|
|
||||||
class TheBoyWhoFell(_ComicControlScraper):
|
class TheBoyWhoFell(ComicControlScraper):
|
||||||
url = 'https://www.boywhofell.com/'
|
url = 'https://www.boywhofell.com/'
|
||||||
firstStripUrl = url + 'comic/ch00p00'
|
firstStripUrl = url + 'comic/ch00p00'
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ class TheBrads(_ParserScraper):
|
||||||
endOfLife = True
|
endOfLife = True
|
||||||
|
|
||||||
|
|
||||||
class TheChroniclesOfHuxcyn(_WordPressScraper):
|
class TheChroniclesOfHuxcyn(WordPressScraper):
|
||||||
url = 'https://huxcyn.com/'
|
url = 'https://huxcyn.com/'
|
||||||
stripUrl = url + 'comic/%s'
|
stripUrl = url + 'comic/%s'
|
||||||
firstStripUrl = stripUrl % 'opening-001'
|
firstStripUrl = stripUrl % 'opening-001'
|
||||||
|
@ -85,7 +85,7 @@ class TheClassMenagerie(_ParserScraper):
|
||||||
endOfLife = True
|
endOfLife = True
|
||||||
|
|
||||||
|
|
||||||
class TheDepths(_WPWebcomic):
|
class TheDepths(WordPressWebcomic):
|
||||||
url = 'https://www.thedepthscomic.com/'
|
url = 'https://www.thedepthscomic.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % 'page-01'
|
firstStripUrl = stripUrl % 'page-01'
|
||||||
|
@ -101,18 +101,18 @@ class TheDepths(_WPWebcomic):
|
||||||
return filename
|
return filename
|
||||||
|
|
||||||
|
|
||||||
class TheDevilsPanties(_WPNavi):
|
class TheDevilsPanties(WordPressNavi):
|
||||||
url = 'https://thedevilspanties.com/'
|
url = 'https://thedevilspanties.com/'
|
||||||
stripUrl = url + 'archives/%s'
|
stripUrl = url + 'archives/%s'
|
||||||
firstStripUrl = stripUrl % '300'
|
firstStripUrl = stripUrl % '300'
|
||||||
help = 'Index format: number'
|
help = 'Index format: number'
|
||||||
|
|
||||||
|
|
||||||
class TheDreamlandChronicles(_WordPressScraper):
|
class TheDreamlandChronicles(WordPressScraper):
|
||||||
url = 'http://www.thedreamlandchronicles.com/'
|
url = 'http://www.thedreamlandchronicles.com/'
|
||||||
|
|
||||||
|
|
||||||
class TheForgottenOrder(_ComicControlScraper):
|
class TheForgottenOrder(ComicControlScraper):
|
||||||
url = 'http://www.forgottenordercomic.com/'
|
url = 'http://www.forgottenordercomic.com/'
|
||||||
firstStripUrl = url + 'comic/prolouge-01-book-1'
|
firstStripUrl = url + 'comic/prolouge-01-book-1'
|
||||||
|
|
||||||
|
@ -126,11 +126,11 @@ class TheGamerCat(_ParserScraper):
|
||||||
help = 'Index format: stripname'
|
help = 'Index format: stripname'
|
||||||
|
|
||||||
|
|
||||||
class TheGentlemansArmchair(_WordPressScraper):
|
class TheGentlemansArmchair(WordPressScraper):
|
||||||
url = 'http://thegentlemansarmchair.com/'
|
url = 'http://thegentlemansarmchair.com/'
|
||||||
|
|
||||||
|
|
||||||
class TheGentleWolf(_WordPressScraper):
|
class TheGentleWolf(WordPressScraper):
|
||||||
url = 'https://thegentlewolf.net/'
|
url = 'https://thegentlewolf.net/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % 'tgw-001'
|
firstStripUrl = stripUrl % 'tgw-001'
|
||||||
|
@ -143,12 +143,12 @@ class TheGentleWolf(_WordPressScraper):
|
||||||
return filename
|
return filename
|
||||||
|
|
||||||
|
|
||||||
class TheGlassScientists(_ComicControlScraper):
|
class TheGlassScientists(ComicControlScraper):
|
||||||
url = 'https://www.theglassscientists.com/'
|
url = 'https://www.theglassscientists.com/'
|
||||||
firstStripUrl = url + 'comic/chapter-i'
|
firstStripUrl = url + 'comic/chapter-i'
|
||||||
|
|
||||||
|
|
||||||
class TheJunkHyenasDiner(_WordPressScraper):
|
class TheJunkHyenasDiner(WordPressScraper):
|
||||||
url = 'http://junkhyenasdiner.com/'
|
url = 'http://junkhyenasdiner.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % 'intro'
|
firstStripUrl = stripUrl % 'intro'
|
||||||
|
@ -164,7 +164,7 @@ class TheLandscaper(_ParserScraper):
|
||||||
endOfLife = True
|
endOfLife = True
|
||||||
|
|
||||||
|
|
||||||
class TheMelvinChronicles(_WordPressScraper):
|
class TheMelvinChronicles(WordPressScraper):
|
||||||
url = 'http://melvin.jeaniebottle.com/'
|
url = 'http://melvin.jeaniebottle.com/'
|
||||||
|
|
||||||
|
|
||||||
|
@ -179,7 +179,7 @@ class TheNightBelongsToUs(_ParserScraper):
|
||||||
adult = True
|
adult = True
|
||||||
|
|
||||||
|
|
||||||
class TheNoob(_WordPressScraper):
|
class TheNoob(WordPressScraper):
|
||||||
url = 'http://thenoobcomic.com/'
|
url = 'http://thenoobcomic.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % '1'
|
firstStripUrl = stripUrl % '1'
|
||||||
|
@ -247,7 +247,7 @@ class TheWhiteboard(_ParserScraper):
|
||||||
return self.url + tourl
|
return self.url + tourl
|
||||||
|
|
||||||
|
|
||||||
class TheWotch(_WordPressScraper):
|
class TheWotch(WordPressScraper):
|
||||||
url = 'http://www.thewotch.com/'
|
url = 'http://www.thewotch.com/'
|
||||||
firstStripUrl = url + '?comic=enter-the-wotch'
|
firstStripUrl = url + '?comic=enter-the-wotch'
|
||||||
|
|
||||||
|
@ -263,7 +263,7 @@ class ThisIsIndexed(_BasicScraper):
|
||||||
help = 'Index format: number'
|
help = 'Index format: number'
|
||||||
|
|
||||||
|
|
||||||
class ThreePanelSoul(_ComicControlScraper):
|
class ThreePanelSoul(ComicControlScraper):
|
||||||
url = 'http://threepanelsoul.com/'
|
url = 'http://threepanelsoul.com/'
|
||||||
firstStripUrl = url + 'comic/a-test-comic'
|
firstStripUrl = url + 'comic/a-test-comic'
|
||||||
|
|
||||||
|
@ -283,7 +283,7 @@ class TinyDickAdventures(_ParserScraper):
|
||||||
return page + '.' + ext
|
return page + '.' + ext
|
||||||
|
|
||||||
|
|
||||||
class ToonHole(_WordPressScraper):
|
class ToonHole(WordPressScraper):
|
||||||
url = 'http://toonhole.com/'
|
url = 'http://toonhole.com/'
|
||||||
firstStripUrl = url + 'comic/toon-hole-coming-soon-2010/'
|
firstStripUrl = url + 'comic/toon-hole-coming-soon-2010/'
|
||||||
|
|
||||||
|
@ -300,7 +300,7 @@ class TrippingOverYou(_BasicScraper):
|
||||||
help = 'Index format: stripname'
|
help = 'Index format: stripname'
|
||||||
|
|
||||||
|
|
||||||
class TumbleDryComics(_WordPressScraper):
|
class TumbleDryComics(WordPressScraper):
|
||||||
url = 'https://www.tumbledrycomics.com/'
|
url = 'https://www.tumbledrycomics.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % 'we-need-to-get-high-jpg'
|
firstStripUrl = stripUrl % 'we-need-to-get-high-jpg'
|
||||||
|
@ -348,7 +348,7 @@ class Turnoff(_ParserScraper):
|
||||||
return "%03d-%s" % (index, file_name)
|
return "%03d-%s" % (index, file_name)
|
||||||
|
|
||||||
|
|
||||||
class TwinDragons(_WordPressScraper):
|
class TwinDragons(WordPressScraper):
|
||||||
url = 'http://www.twindragonscomic.com/'
|
url = 'http://www.twindragonscomic.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % 'the-beginning'
|
firstStripUrl = stripUrl % 'the-beginning'
|
||||||
|
|
|
@ -2,11 +2,11 @@
|
||||||
# Copyright (C) 2019-2022 Tobias Gruetzmacher
|
# Copyright (C) 2019-2022 Tobias Gruetzmacher
|
||||||
# Copyright (C) 2019-2022 Daniel Ring
|
# Copyright (C) 2019-2022 Daniel Ring
|
||||||
from ..output import out
|
from ..output import out
|
||||||
from ..scraper import _ParserScraper
|
from ..scraper import ParserScraper
|
||||||
from ..xml import NS
|
from ..xml import NS
|
||||||
|
|
||||||
|
|
||||||
class Tapas(_ParserScraper):
|
class Tapas(ParserScraper):
|
||||||
baseUrl = 'https://tapas.io/'
|
baseUrl = 'https://tapas.io/'
|
||||||
imageSearch = '//article[contains(@class, "js-episode-article")]//img/@data-src'
|
imageSearch = '//article[contains(@class, "js-episode-article")]//img/@data-src'
|
||||||
prevSearch = '//a[contains(@class, "js-prev-ep-btn")]'
|
prevSearch = '//a[contains(@class, "js-prev-ep-btn")]'
|
||||||
|
|
|
@ -7,20 +7,20 @@ from re import compile
|
||||||
from urllib.parse import urljoin
|
from urllib.parse import urljoin
|
||||||
from lxml import etree
|
from lxml import etree
|
||||||
|
|
||||||
from ..scraper import _BasicScraper, _ParserScraper
|
from ..scraper import BasicScraper, ParserScraper
|
||||||
from ..helpers import indirectStarter
|
from ..helpers import indirectStarter
|
||||||
from ..util import tagre
|
from ..util import tagre
|
||||||
from .common import _ComicControlScraper, _WordPressScraper, _WPNavi
|
from .common import ComicControlScraper, WordPressScraper, WordPressNavi
|
||||||
|
|
||||||
|
|
||||||
class Underling(_WPNavi):
|
class Underling(WordPressNavi):
|
||||||
url = ('https://web.archive.org/web/20190806120425/'
|
url = ('https://web.archive.org/web/20190806120425/'
|
||||||
'http://underlingcomic.com/')
|
'http://underlingcomic.com/')
|
||||||
firstStripUrl = url + 'page-one/'
|
firstStripUrl = url + 'page-one/'
|
||||||
endOfLife = True
|
endOfLife = True
|
||||||
|
|
||||||
|
|
||||||
class Undertow(_BasicScraper):
|
class Undertow(BasicScraper):
|
||||||
url = 'http://undertow.dreamshards.org/'
|
url = 'http://undertow.dreamshards.org/'
|
||||||
imageSearch = compile(tagre("img", "src", r'([^"]+\.jpg)'))
|
imageSearch = compile(tagre("img", "src", r'([^"]+\.jpg)'))
|
||||||
prevSearch = compile(r'href="(.+?)".+?teynpoint')
|
prevSearch = compile(r'href="(.+?)".+?teynpoint')
|
||||||
|
@ -28,7 +28,7 @@ class Undertow(_BasicScraper):
|
||||||
starter = indirectStarter
|
starter = indirectStarter
|
||||||
|
|
||||||
|
|
||||||
class unDivine(_ComicControlScraper):
|
class unDivine(ComicControlScraper):
|
||||||
url = 'https://www.undivinecomic.com/'
|
url = 'https://www.undivinecomic.com/'
|
||||||
stripUrl = url + 'comic/%s'
|
stripUrl = url + 'comic/%s'
|
||||||
firstStripUrl = stripUrl % 'page-1'
|
firstStripUrl = stripUrl % 'page-1'
|
||||||
|
@ -46,7 +46,7 @@ class unDivine(_ComicControlScraper):
|
||||||
return filename
|
return filename
|
||||||
|
|
||||||
|
|
||||||
class UnicornJelly(_BasicScraper):
|
class UnicornJelly(BasicScraper):
|
||||||
baseUrl = 'http://unicornjelly.com/'
|
baseUrl = 'http://unicornjelly.com/'
|
||||||
url = baseUrl + 'uni666.html'
|
url = baseUrl + 'uni666.html'
|
||||||
stripUrl = baseUrl + 'uni%s.html'
|
stripUrl = baseUrl + 'uni%s.html'
|
||||||
|
@ -56,7 +56,7 @@ class UnicornJelly(_BasicScraper):
|
||||||
help = 'Index format: nnn'
|
help = 'Index format: nnn'
|
||||||
|
|
||||||
|
|
||||||
class Unsounded(_ParserScraper):
|
class Unsounded(ParserScraper):
|
||||||
url = 'http://www.casualvillain.com/Unsounded/'
|
url = 'http://www.casualvillain.com/Unsounded/'
|
||||||
startUrl = url + 'comic+index/'
|
startUrl = url + 'comic+index/'
|
||||||
stripUrl = url + 'comic/ch%s/ch%s_%s.html'
|
stripUrl = url + 'comic/ch%s/ch%s_%s.html'
|
||||||
|
@ -95,7 +95,7 @@ class Unsounded(_ParserScraper):
|
||||||
return self.stripUrl % (chapter, chapter, num)
|
return self.stripUrl % (chapter, chapter, num)
|
||||||
|
|
||||||
|
|
||||||
class UrgentTransformationCrisis(_WordPressScraper):
|
class UrgentTransformationCrisis(WordPressScraper):
|
||||||
url = 'http://www.catomix.com/utc/'
|
url = 'http://www.catomix.com/utc/'
|
||||||
firstStripUrl = url + 'comic/cover1'
|
firstStripUrl = url + 'comic/cover1'
|
||||||
|
|
||||||
|
|
|
@ -8,10 +8,10 @@ from re import compile, escape, IGNORECASE
|
||||||
from ..scraper import _BasicScraper, _ParserScraper
|
from ..scraper import _BasicScraper, _ParserScraper
|
||||||
from ..util import tagre
|
from ..util import tagre
|
||||||
from ..helpers import bounceStarter
|
from ..helpers import bounceStarter
|
||||||
from .common import _ComicControlScraper, _WPNaviIn, _WPWebcomic
|
from .common import ComicControlScraper, WordPressNaviIn, WordPressWebcomic
|
||||||
|
|
||||||
|
|
||||||
class WapsiSquare(_WPNaviIn):
|
class WapsiSquare(WordPressNaviIn):
|
||||||
url = 'http://wapsisquare.com/'
|
url = 'http://wapsisquare.com/'
|
||||||
firstStripUrl = url + 'comic/09092001/'
|
firstStripUrl = url + 'comic/09092001/'
|
||||||
|
|
||||||
|
@ -81,14 +81,14 @@ class WereIWolf(_ParserScraper):
|
||||||
return self.stripUrl % (index[0], index[1])
|
return self.stripUrl % (index[0], index[1])
|
||||||
|
|
||||||
|
|
||||||
class WhiteNoise(_WPWebcomic):
|
class WhiteNoise(WordPressWebcomic):
|
||||||
url = 'http://whitenoisecomic.com/'
|
url = 'http://whitenoisecomic.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % 'book-one'
|
firstStripUrl = stripUrl % 'book-one'
|
||||||
imageSearch = '//div[@id="comic"]//img'
|
imageSearch = '//div[@id="comic"]//img'
|
||||||
|
|
||||||
|
|
||||||
class WhiteNoiseLee(_ComicControlScraper):
|
class WhiteNoiseLee(ComicControlScraper):
|
||||||
url = 'http://www.white-noise-comic.com/'
|
url = 'http://www.white-noise-comic.com/'
|
||||||
stripUrl = url + 'comic/%s'
|
stripUrl = url + 'comic/%s'
|
||||||
firstStripUrl = stripUrl % '1-0'
|
firstStripUrl = stripUrl % '1-0'
|
||||||
|
@ -98,7 +98,7 @@ class WhiteNoiseLee(_ComicControlScraper):
|
||||||
return pageUrl.rsplit('/', 1)[-1] + '.' + imageUrl.rsplit('.', 1)[-1]
|
return pageUrl.rsplit('/', 1)[-1] + '.' + imageUrl.rsplit('.', 1)[-1]
|
||||||
|
|
||||||
|
|
||||||
class Whomp(_ComicControlScraper):
|
class Whomp(ComicControlScraper):
|
||||||
url = 'http://www.whompcomic.com/'
|
url = 'http://www.whompcomic.com/'
|
||||||
firstStripUrl = url + 'comic/06152010'
|
firstStripUrl = url + 'comic/06152010'
|
||||||
textSearch = '//img[@id="cc-comic"]/@title'
|
textSearch = '//img[@id="cc-comic"]/@title'
|
||||||
|
@ -127,7 +127,7 @@ class Wigu(_ParserScraper):
|
||||||
help = 'Index format: n'
|
help = 'Index format: n'
|
||||||
|
|
||||||
|
|
||||||
class WildeLife(_ComicControlScraper):
|
class WildeLife(ComicControlScraper):
|
||||||
url = 'http://www.wildelifecomic.com/'
|
url = 'http://www.wildelifecomic.com/'
|
||||||
stripUrl = url + 'comic/%s'
|
stripUrl = url + 'comic/%s'
|
||||||
firstStripUrl = stripUrl % '1'
|
firstStripUrl = stripUrl % '1'
|
||||||
|
|
|
@ -3,11 +3,11 @@
|
||||||
# Copyright (C) 2012-2014 Bastian Kleineidam
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
# Copyright (C) 2015-2020 Tobias Gruetzmacher
|
# Copyright (C) 2015-2020 Tobias Gruetzmacher
|
||||||
# Copyright (C) 2019-2020 Daniel Ring
|
# Copyright (C) 2019-2020 Daniel Ring
|
||||||
from .common import _WordPressScraper
|
from .common import WordPressScraper
|
||||||
from ..helpers import indirectStarter
|
from ..helpers import indirectStarter
|
||||||
|
|
||||||
|
|
||||||
class WebcomicFactory(_WordPressScraper):
|
class WebcomicFactory(WordPressScraper):
|
||||||
starter = indirectStarter
|
starter = indirectStarter
|
||||||
|
|
||||||
def __init__(self, name, url):
|
def __init__(self, name, url):
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
# Copyright (C) 2019-2022 Tobias Gruetzmacher
|
# Copyright (C) 2019-2022 Tobias Gruetzmacher
|
||||||
# Copyright (C) 2019-2022 Daniel Ring
|
# Copyright (C) 2019-2022 Daniel Ring
|
||||||
from ..scraper import _ParserScraper
|
from ..scraper import ParserScraper
|
||||||
|
|
||||||
|
|
||||||
class WebToons(_ParserScraper):
|
class WebToons(ParserScraper):
|
||||||
imageSearch = '//img[contains(@class, "_images")]/@data-url'
|
imageSearch = '//img[contains(@class, "_images")]/@data-url'
|
||||||
prevSearch = '//a[contains(@class, "_prevEpisode")]'
|
prevSearch = '//a[contains(@class, "_prevEpisode")]'
|
||||||
multipleImagesPerStrip = True
|
multipleImagesPerStrip = True
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
||||||
# Copyright (C) 2012-2014 Bastian Kleineidam
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
# Copyright (C) 2015-2021 Tobias Gruetzmacher
|
# Copyright (C) 2015-2022 Tobias Gruetzmacher
|
||||||
# Copyright (C) 2019-2020 Daniel Ring
|
# Copyright (C) 2019-2020 Daniel Ring
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from ..scraper import _ParserScraper
|
from ..scraper import ParserScraper
|
||||||
from ..helpers import bounceStarter
|
from ..helpers import bounceStarter
|
||||||
|
|
||||||
|
|
||||||
class _WLPComics(_ParserScraper):
|
class WLPComics(ParserScraper):
|
||||||
imageSearch = '//img[contains(@alt, " Comic")]'
|
imageSearch = '//img[contains(@alt, " Comic")]'
|
||||||
prevSearch = '//a[contains(text(), "Previous ")]'
|
prevSearch = '//a[contains(text(), "Previous ")]'
|
||||||
nextSearch = '//a[contains(text(), "Next ")]'
|
nextSearch = '//a[contains(text(), "Next ")]'
|
||||||
|
@ -17,20 +17,20 @@ class _WLPComics(_ParserScraper):
|
||||||
help = 'Index format: nnn'
|
help = 'Index format: nnn'
|
||||||
|
|
||||||
def __init__(self, name):
|
def __init__(self, name):
|
||||||
super(_WLPComics, self).__init__('WLP/' + name)
|
super().__init__('WLP/' + name)
|
||||||
|
|
||||||
def namer(self, image_url, page_url):
|
def namer(self, image_url, page_url):
|
||||||
return (page_url.rsplit('/', 1)[-1].split('.')[0] + '_' +
|
return (page_url.rsplit('/', 1)[-1].split('.')[0] + '_' +
|
||||||
image_url.rsplit('/', 1)[-1])
|
image_url.rsplit('/', 1)[-1])
|
||||||
|
|
||||||
|
|
||||||
class ChichiChan(_WLPComics):
|
class ChichiChan(WLPComics):
|
||||||
url = 'http://www.wlpcomics.com/adult/chichi/'
|
url = 'http://www.wlpcomics.com/adult/chichi/'
|
||||||
stripUrl = url + '%s.html'
|
stripUrl = url + '%s.html'
|
||||||
adult = True
|
adult = True
|
||||||
|
|
||||||
|
|
||||||
class ChocolateMilkMaid(_WLPComics):
|
class ChocolateMilkMaid(WLPComics):
|
||||||
# Newer pages seem to be broken
|
# Newer pages seem to be broken
|
||||||
stripUrl = 'http://www.wlpcomics.com/adult/cm/%s.html'
|
stripUrl = 'http://www.wlpcomics.com/adult/cm/%s.html'
|
||||||
url = stripUrl % '264'
|
url = stripUrl % '264'
|
||||||
|
@ -46,12 +46,12 @@ class ChocolateMilkMaid(_WLPComics):
|
||||||
return tourl
|
return tourl
|
||||||
|
|
||||||
|
|
||||||
class MaidAttack(_WLPComics):
|
class MaidAttack(WLPComics):
|
||||||
url = 'http://www.wlpcomics.com/general/maidattack/'
|
url = 'http://www.wlpcomics.com/general/maidattack/'
|
||||||
stripUrl = url + '%s.html'
|
stripUrl = url + '%s.html'
|
||||||
|
|
||||||
|
|
||||||
class PeterIsTheWolfAdult(_WLPComics):
|
class PeterIsTheWolfAdult(WLPComics):
|
||||||
stripUrl = 'http://www.peteristhewolf.com/adult/%s.html'
|
stripUrl = 'http://www.peteristhewolf.com/adult/%s.html'
|
||||||
# navigation to newest page is broken
|
# navigation to newest page is broken
|
||||||
url = stripUrl % '427'
|
url = stripUrl % '427'
|
||||||
|
@ -74,7 +74,7 @@ class PeterIsTheWolfAdult(_WLPComics):
|
||||||
return super(PeterIsTheWolfAdult, self).getPrevUrl(url, data)
|
return super(PeterIsTheWolfAdult, self).getPrevUrl(url, data)
|
||||||
|
|
||||||
|
|
||||||
class PeterIsTheWolfGeneral(_WLPComics):
|
class PeterIsTheWolfGeneral(WLPComics):
|
||||||
stripUrl = 'http://www.peteristhewolf.com/general/%s.html'
|
stripUrl = 'http://www.peteristhewolf.com/general/%s.html'
|
||||||
# navigation to newest page is broken
|
# navigation to newest page is broken
|
||||||
url = stripUrl % '427'
|
url = stripUrl % '427'
|
||||||
|
@ -94,7 +94,7 @@ class PeterIsTheWolfGeneral(_WLPComics):
|
||||||
return super(PeterIsTheWolfGeneral, self).getPrevUrl(url, data)
|
return super(PeterIsTheWolfGeneral, self).getPrevUrl(url, data)
|
||||||
|
|
||||||
|
|
||||||
class Stellar(_WLPComics):
|
class Stellar(WLPComics):
|
||||||
url = 'http://www.wlpcomics.com/adult/stellar/'
|
url = 'http://www.wlpcomics.com/adult/stellar/'
|
||||||
stripUrl = url + '%s.html'
|
stripUrl = url + '%s.html'
|
||||||
adult = True
|
adult = True
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
# Copyright (C) 2019-2020 Tobias Gruetzmacher
|
# Copyright (C) 2019-2022 Tobias Gruetzmacher
|
||||||
# Copyright (C) 2019-2022 Daniel Ring
|
# Copyright (C) 2019-2022 Daniel Ring
|
||||||
from ..scraper import _ParserScraper
|
from ..scraper import ParserScraper
|
||||||
from ..helpers import indirectStarter
|
from ..helpers import indirectStarter
|
||||||
|
|
||||||
|
|
||||||
class Wrongside(_ParserScraper):
|
class Wrongside(ParserScraper):
|
||||||
baseUrl = 'http://ayzewi.com/maingallery3/'
|
baseUrl = 'http://ayzewi.com/maingallery3/'
|
||||||
url = baseUrl + 'index.php?/category/5'
|
url = baseUrl + 'index.php?/category/5'
|
||||||
stripUrl = baseUrl + 'picture.php?%s'
|
stripUrl = baseUrl + 'picture.php?%s'
|
||||||
|
@ -41,7 +41,7 @@ class WrongsideBeginnings(Wrongside):
|
||||||
firstStripUrl = stripUrl % '/2/category/18'
|
firstStripUrl = stripUrl % '/2/category/18'
|
||||||
|
|
||||||
|
|
||||||
class WrongsideSideStories(_ParserScraper):
|
class WrongsideSideStories(ParserScraper):
|
||||||
baseUrl = 'http://ayzewi.com/maingallery3/'
|
baseUrl = 'http://ayzewi.com/maingallery3/'
|
||||||
stripUrl = baseUrl + 'picture.php?%s'
|
stripUrl = baseUrl + 'picture.php?%s'
|
||||||
imageSearch = '//img[@id="theMainImage"]/@src'
|
imageSearch = '//img[@id="theMainImage"]/@src'
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
||||||
# Copyright (C) 2012-2014 Bastian Kleineidam
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
# Copyright (C) 2015-2016 Tobias Gruetzmacher
|
# Copyright (C) 2015-2022 Tobias Gruetzmacher
|
||||||
from ..scraper import _ParserScraper
|
from ..scraper import ParserScraper
|
||||||
|
|
||||||
|
|
||||||
class KindOfNormal(_ParserScraper):
|
class KindOfNormal(ParserScraper):
|
||||||
imageSearch = '//article[1]//div[@class="box-content"]//img'
|
imageSearch = '//article[1]//div[@class="box-content"]//img'
|
||||||
prevSearch = '//a[@class="prev"]'
|
prevSearch = '//a[@class="prev"]'
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,13 @@
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
||||||
# Copyright (C) 2012-2014 Bastian Kleineidam
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
# Copyright (C) 2015-2020 Tobias Gruetzmacher
|
# Copyright (C) 2015-2022 Tobias Gruetzmacher
|
||||||
# Copyright (C) 2019-2020 Daniel Ring
|
# Copyright (C) 2019-2020 Daniel Ring
|
||||||
from ..scraper import _ParserScraper
|
from ..scraper import ParserScraper
|
||||||
from ..helpers import bounceStarter
|
from ..helpers import bounceStarter
|
||||||
|
|
||||||
|
|
||||||
class XKCD(_ParserScraper):
|
class xkcd(ParserScraper):
|
||||||
name = 'xkcd'
|
|
||||||
url = 'https://xkcd.com/'
|
url = 'https://xkcd.com/'
|
||||||
stripUrl = url + '%s/'
|
stripUrl = url + '%s/'
|
||||||
firstStripUrl = stripUrl % '1'
|
firstStripUrl = stripUrl % '1'
|
||||||
|
|
|
@ -3,10 +3,10 @@
|
||||||
# Copyright (C) 2012-2014 Bastian Kleineidam
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
# Copyright (C) 2015-2022 Tobias Gruetzmacher
|
# Copyright (C) 2015-2022 Tobias Gruetzmacher
|
||||||
# Copyright (C) 2019-2020 Daniel Ring
|
# Copyright (C) 2019-2020 Daniel Ring
|
||||||
from .common import _WordPressScraper, _WPWebcomic
|
from .common import WordPressScraper, WordPressWebcomic
|
||||||
|
|
||||||
|
|
||||||
class YAFGC(_WordPressScraper):
|
class YAFGC(WordPressScraper):
|
||||||
baseUrl = 'https://www.yafgc.net/'
|
baseUrl = 'https://www.yafgc.net/'
|
||||||
url = baseUrl + '?latest'
|
url = baseUrl + '?latest'
|
||||||
stripUrl = baseUrl + 'comic/%s'
|
stripUrl = baseUrl + 'comic/%s'
|
||||||
|
@ -17,7 +17,7 @@ class YAFGC(_WordPressScraper):
|
||||||
self.session.add_throttle('www.yafgc.net', 3.0, 15.5)
|
self.session.add_throttle('www.yafgc.net', 3.0, 15.5)
|
||||||
|
|
||||||
|
|
||||||
class YoshSaga(_WPWebcomic):
|
class YoshSaga(WordPressWebcomic):
|
||||||
url = 'https://www.yoshsaga.com/'
|
url = 'https://www.yoshsaga.com/'
|
||||||
stripUrl = url + 'comic/%s/'
|
stripUrl = url + 'comic/%s/'
|
||||||
firstStripUrl = stripUrl % 'introduction'
|
firstStripUrl = stripUrl % 'introduction'
|
||||||
|
|
|
@ -1,23 +1,23 @@
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
||||||
# Copyright (C) 2012-2014 Bastian Kleineidam
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
# Copyright (C) 2015-2021 Tobias Gruetzmacher
|
# Copyright (C) 2015-2022 Tobias Gruetzmacher
|
||||||
from re import compile, escape
|
from re import compile, escape
|
||||||
|
|
||||||
from ..scraper import _BasicScraper, _ParserScraper
|
from ..scraper import BasicScraper, ParserScraper
|
||||||
from ..util import tagre
|
from ..util import tagre
|
||||||
from ..helpers import bounceStarter, joinPathPartsNamer
|
from ..helpers import bounceStarter, joinPathPartsNamer
|
||||||
from .common import _WPNavi
|
from .common import WordPressNavi
|
||||||
|
|
||||||
|
|
||||||
class ZapComic(_ParserScraper):
|
class ZapComic(ParserScraper):
|
||||||
url = 'http://www.zapcomic.com/'
|
url = 'http://www.zapcomic.com/'
|
||||||
css = True
|
css = True
|
||||||
imageSearch = 'img.comic-item'
|
imageSearch = 'img.comic-item'
|
||||||
prevSearch = 'a.previous-comic-link'
|
prevSearch = 'a.previous-comic-link'
|
||||||
|
|
||||||
|
|
||||||
class Zapiro(_ParserScraper):
|
class Zapiro(ParserScraper):
|
||||||
url = 'http://mg.co.za/zapiro/'
|
url = 'http://mg.co.za/zapiro/'
|
||||||
starter = bounceStarter
|
starter = bounceStarter
|
||||||
imageSearch = '//div[@id="cartoon"]/img'
|
imageSearch = '//div[@id="cartoon"]/img'
|
||||||
|
@ -26,7 +26,7 @@ class Zapiro(_ParserScraper):
|
||||||
namer = joinPathPartsNamer((-1,), ())
|
namer = joinPathPartsNamer((-1,), ())
|
||||||
|
|
||||||
|
|
||||||
class ZenPencils(_WPNavi):
|
class ZenPencils(WordPressNavi):
|
||||||
url = 'https://web.archive.org/web/20200723091741/https://zenpencils.com/'
|
url = 'https://web.archive.org/web/20200723091741/https://zenpencils.com/'
|
||||||
multipleImagesPerStrip = True
|
multipleImagesPerStrip = True
|
||||||
firstStripUrl = url + 'comic/1-ralph-waldo-emerson-make-them-cry/'
|
firstStripUrl = url + 'comic/1-ralph-waldo-emerson-make-them-cry/'
|
||||||
|
@ -36,7 +36,7 @@ class ZenPencils(_WPNavi):
|
||||||
endOfLife = True
|
endOfLife = True
|
||||||
|
|
||||||
|
|
||||||
class ZombieHunters(_BasicScraper):
|
class ZombieHunters(BasicScraper):
|
||||||
url = 'http://www.thezombiehunters.com/'
|
url = 'http://www.thezombiehunters.com/'
|
||||||
stripUrl = url + '?strip_id=%s'
|
stripUrl = url + '?strip_id=%s'
|
||||||
firstStripUrl = stripUrl % '1'
|
firstStripUrl = stripUrl % '1'
|
||||||
|
@ -45,7 +45,7 @@ class ZombieHunters(_BasicScraper):
|
||||||
help = 'Index format: n(unpadded)'
|
help = 'Index format: n(unpadded)'
|
||||||
|
|
||||||
|
|
||||||
class Zwarwald(_BasicScraper):
|
class Zwarwald(BasicScraper):
|
||||||
url = "http://www.zwarwald.de/"
|
url = "http://www.zwarwald.de/"
|
||||||
rurl = escape(url)
|
rurl = escape(url)
|
||||||
stripUrl = url + 'index.php/page/%s/'
|
stripUrl = url + 'index.php/page/%s/'
|
||||||
|
|
|
@ -2,12 +2,14 @@
|
||||||
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
||||||
# Copyright (C) 2012-2014 Bastian Kleineidam
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
# Copyright (C) 2015-2022 Tobias Gruetzmacher
|
# Copyright (C) 2015-2022 Tobias Gruetzmacher
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
import html
|
import html
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import warnings
|
import warnings
|
||||||
from urllib.parse import urljoin
|
from urllib.parse import urljoin
|
||||||
from typing import Dict, List, Optional, Union, Pattern, Sequence
|
from typing import Collection, Dict, List, Optional, Type, Union, Pattern, Sequence
|
||||||
|
|
||||||
import lxml
|
import lxml
|
||||||
from lxml.html.defs import link_attrs as html_link_attrs
|
from lxml.html.defs import link_attrs as html_link_attrs
|
||||||
|
@ -99,11 +101,13 @@ class Scraper:
|
||||||
session: http.Session = http.default_session
|
session: http.Session = http.default_session
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def getmodules(cls):
|
def getmodules(cls) -> Collection[Scraper]:
|
||||||
|
if cls.url is None:
|
||||||
|
return ()
|
||||||
name = cls.__name__
|
name = cls.__name__
|
||||||
if hasattr(cls, 'name'):
|
if hasattr(cls, 'name'):
|
||||||
name = cls.name
|
name = cls.name
|
||||||
return [cls(name)]
|
return (cls(name),)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def indexes(self):
|
def indexes(self):
|
||||||
|
@ -361,7 +365,7 @@ class Scraper:
|
||||||
raise GeoblockedException()
|
raise GeoblockedException()
|
||||||
|
|
||||||
|
|
||||||
class _BasicScraper(Scraper):
|
class BasicScraper(Scraper):
|
||||||
"""
|
"""
|
||||||
Scraper base class that matches regular expressions against HTML pages.
|
Scraper base class that matches regular expressions against HTML pages.
|
||||||
|
|
||||||
|
@ -376,7 +380,7 @@ class _BasicScraper(Scraper):
|
||||||
BASE_SEARCH = re.compile(tagre("base", "href", '([^"]*)'))
|
BASE_SEARCH = re.compile(tagre("base", "href", '([^"]*)'))
|
||||||
|
|
||||||
def getPage(self, url):
|
def getPage(self, url):
|
||||||
content = super(_BasicScraper, self).getPage(url).text
|
content = super().getPage(url).text
|
||||||
# determine base URL
|
# determine base URL
|
||||||
baseUrl = None
|
baseUrl = None
|
||||||
match = self.BASE_SEARCH.search(content)
|
match = self.BASE_SEARCH.search(content)
|
||||||
|
@ -426,7 +430,7 @@ class _BasicScraper(Scraper):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
class _ParserScraper(Scraper):
|
class ParserScraper(Scraper):
|
||||||
"""
|
"""
|
||||||
Scraper base class that uses a HTML parser and XPath expressions.
|
Scraper base class that uses a HTML parser and XPath expressions.
|
||||||
|
|
||||||
|
@ -452,7 +456,7 @@ class _ParserScraper(Scraper):
|
||||||
css = False
|
css = False
|
||||||
|
|
||||||
def getPage(self, url):
|
def getPage(self, url):
|
||||||
page = super(_ParserScraper, self).getPage(url)
|
page = super().getPage(url)
|
||||||
if page.encoding:
|
if page.encoding:
|
||||||
# Requests figured out the encoding, so we can deliver Unicode to
|
# Requests figured out the encoding, so we can deliver Unicode to
|
||||||
# LXML. Unfortunatly, LXML feels betrayed if there is still an XML
|
# LXML. Unfortunatly, LXML feels betrayed if there is still an XML
|
||||||
|
@ -535,6 +539,11 @@ class _ParserScraper(Scraper):
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
||||||
|
# Legacy aliases
|
||||||
|
_BasicScraper = BasicScraper
|
||||||
|
_ParserScraper = ParserScraper
|
||||||
|
|
||||||
|
|
||||||
class Cache:
|
class Cache:
|
||||||
"""Cache for comic scraper objects. The cache is initialized on first use.
|
"""Cache for comic scraper objects. The cache is initialized on first use.
|
||||||
This is cached, since iterating & loading a complete package might be quite
|
This is cached, since iterating & loading a complete package might be quite
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
# Copyright (C) 2021 Tobias Gruetzmacher
|
# Copyright (C) 2021-2022 Tobias Gruetzmacher
|
||||||
from ..scraper import _ParserScraper
|
from ..scraper import ParserScraper
|
||||||
|
|
||||||
|
|
||||||
class AnotherDummyTestScraper(_ParserScraper):
|
class AnotherDummyTestScraper(ParserScraper):
|
||||||
url = 'https://dummy.example/'
|
url = 'https://dummy.example/'
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
# Copyright (C) 2020 Tobias Gruetzmacher
|
# Copyright (C) 2020 Tobias Gruetzmacher
|
||||||
from ..scraper import _ParserScraper
|
from ..scraper import ParserScraper
|
||||||
|
|
||||||
|
|
||||||
class ADummyTestScraper(_ParserScraper):
|
class ADummyTestScraper(ParserScraper):
|
||||||
url = 'https://dummy.example/'
|
url = 'https://dummy.example/'
|
||||||
|
|
|
@ -22,11 +22,11 @@ def get_test_scrapers():
|
||||||
else:
|
else:
|
||||||
# Get limited number of scraper tests as default
|
# Get limited number of scraper tests as default
|
||||||
testscrapernames = [
|
testscrapernames = [
|
||||||
# "classic" _BasicScraper
|
# "classic" BasicScraper
|
||||||
'AbstruseGoose',
|
'AbstruseGoose',
|
||||||
# complex _ParserScraper
|
# complex ParserScraper
|
||||||
'GoComics/CalvinAndHobbes',
|
'GoComics/CalvinAndHobbes',
|
||||||
# _WordPressScraper
|
# WordPressScraper
|
||||||
'GrrlPower',
|
'GrrlPower',
|
||||||
]
|
]
|
||||||
scraper_pattern = '^(' + '|'.join(testscrapernames) + ')$'
|
scraper_pattern = '^(' + '|'.join(testscrapernames) + ')$'
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
||||||
# Copyright (C) 2012-2014 Bastian Kleineidam
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
# Copyright (C) 2015-2019 Tobias Gruetzmacher
|
# Copyright (C) 2015-2022 Tobias Gruetzmacher
|
||||||
import responses
|
import responses
|
||||||
|
|
||||||
from dosagelib import scraper
|
from dosagelib import scraper
|
||||||
|
|
||||||
|
|
||||||
class ATestScraper(scraper._BasicScraper):
|
class ATestScraper(scraper.BasicScraper):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
|
4
tox.ini
4
tox.ini
|
@ -35,7 +35,7 @@ commands =
|
||||||
[flake8]
|
[flake8]
|
||||||
# we aim for 79, but this suppresses warnings for now...
|
# we aim for 79, but this suppresses warnings for now...
|
||||||
max-line-length = 100
|
max-line-length = 100
|
||||||
ignore = E127,E128,E241,FI12,FI14,FI15,FI18,FI50,FI51,FI53,FI54,FI55,W504
|
ignore = E127,E128,E241,FI12,FI14,FI15,FI18,FI50,FI51,FI53,FI54,FI55,FI58,W504
|
||||||
require-code = True
|
require-code = True
|
||||||
no-accept-encodings = True
|
no-accept-encodings = True
|
||||||
min-version = 3.7
|
min-version = 3.7
|
||||||
|
@ -43,7 +43,7 @@ min-version = 3.7
|
||||||
# Duplicated for CodeClimate...
|
# Duplicated for CodeClimate...
|
||||||
[pep8]
|
[pep8]
|
||||||
max-line-length = 100
|
max-line-length = 100
|
||||||
ignore = E127,E128,E241,FI12,FI14,FI15,FI18,FI50,FI51,FI53,FI54,FI55,W504
|
ignore = E127,E128,E241,FI12,FI14,FI15,FI18,FI50,FI51,FI53,FI54,FI55,FI58,W504
|
||||||
|
|
||||||
[pytest]
|
[pytest]
|
||||||
filterwarnings = default
|
filterwarnings = default
|
||||||
|
|
Loading…
Reference in a new issue