# SPDX-License-Identifier: MIT # Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs # Copyright (C) 2012-2014 Bastian Kleineidam # Copyright (C) 2015-2022 Tobias Gruetzmacher # Copyright (C) 2019-2020 Daniel Ring from re import compile, escape from ..scraper import BasicScraper, ParserScraper from ..util import tagre from .common import WordPressScraper, WordPressNavi class IAmArg(BasicScraper): url = 'http://iamarg.com/' rurl = escape(url) stripUrl = url + '%s/' firstStripUrl = stripUrl % '2011/05/08/05082011' imageSearch = compile(tagre("img", "src", r'(//iamarg.com/comics/\d+-\d+-\d+[^"]+)')) prevSearch = compile(tagre("a", "href", r'(%s\d+/\d+/\d+/[^"]+)' % rurl, after="prev")) help = 'Index format: yyyy/mm/dd/stripname' class ICanBarelyDraw(BasicScraper): url = 'http://www.icanbarelydraw.com/comic/' rurl = escape(url) stripUrl = url + '%s' firstStripUrl = stripUrl % '39' imageSearch = compile(tagre("img", "src", r'(%scomics/\d+-\d+-\d+-[^"]+)' % rurl)) prevSearch = compile(tagre("a", "href", r'(%s\d+)' % rurl)) help = 'Index format: number' class IDreamOfAJeanieBottle(WordPressScraper): url = 'http://jeaniebottle.com/' class InternetWebcomic(WordPressNavi): url = 'http://www.internet-webcomic.com/' stripUrl = url + '?p=%s' firstStripUrl = stripUrl % '30' help = 'Index format: n' class Inverloch(ParserScraper): stripUrl = 'https://www.seraph-inn.com/view.php?story=inverloch&page=%s' url = stripUrl % '763' firstStripUrl = stripUrl % '2' imageSearch = '//img[@class="page"]' prevSearch = '//p[@class="comic-nav"]/a[text()=" Previous"]' multipleImagesPerStrip = True endOfLife = True class IRovedOut(ParserScraper): url = 'https://www.irovedout.com/' stripUrl = url + '%s/' firstStripUrl = stripUrl % 'iro' imageSearch = '//div[@id="comic"]//img' prevSearch = '//a[@class="navi comic-nav-previous navi-prev"]' def namer(self, imageUrl, pageUrl): page = self.getPage(pageUrl) strip = page.xpath('//div[@id="comic-wrap"]/@class')[0].replace('comic-id-', '') parts = page.xpath('//div[@id="comic"]//img/@src')[0].split('/') return "{0}-{1}".format(strip.zfill(5), parts[7]) def starter(self): """Return last gallery link.""" url = 'https://www.irovedout.com/' data = self.getPage(url) link = data.xpath('//a[@class="navi navi-last"]/@href').pop(0) return link class IrregularWebcomic(BasicScraper): url = 'http://www.irregularwebcomic.net/' stripUrl = url + '%s.html' firstStripUrl = stripUrl % '1' imageSearch = compile(r'') prevSearch = compile(r'Previous ') help = 'Index format: nnn' class IslaAukate(ParserScraper): url = 'https://overlordcomic.com/archive/default/latest' stripUrl = 'https://overlordcomic.com/archive/default/pages/%s' firstStripUrl = stripUrl % '001' imageSearch = '//div[@id="comicpage"]/img' prevSearch = '//nav[@class="comicnav"]/a[text()="Prev"]' def namer(self, imageUrl, pageUrl): filename = imageUrl.rsplit('/', 1)[-1] return filename.rsplit('_', 1)[0] + '.' + filename.rsplit('.', 1)[-1] class IslaAukateColor(ParserScraper): url = 'https://overlordcomic.com/archive/color/latest' stripUrl = 'https://overlordcomic.com/archive/color/pages/%s' firstStripUrl = stripUrl % '001' imageSearch = '//div[@id="comicpage"]/img' prevSearch = '//nav[@class="comicnav"]/a[text()="Prev"]' def namer(self, imageUrl, pageUrl): # Fix filenames of early comics filename = imageUrl.rsplit('/', 1)[-1] if filename[0].isdigit(): filename = 'Aukate' + filename return filename.rsplit('_', 1)[0] + '.' + filename.rsplit('.', 1)[-1] class ItsWalky(WordPressScraper): url = 'http://www.itswalky.com/'