2016-03-31 21:13:54 +00:00
|
|
|
# -*- coding: utf-8 -*-
|
2012-06-20 20:41:04 +00:00
|
|
|
# Copyright (C) 2004-2005 Tristan Seligmann and Jonathan Jacobs
|
2014-01-05 15:50:57 +00:00
|
|
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
2016-03-31 21:13:54 +00:00
|
|
|
# Copyright (C) 2015-2016 Tobias Gruetzmacher
|
2012-06-20 19:58:13 +00:00
|
|
|
|
2016-03-31 21:13:54 +00:00
|
|
|
from __future__ import absolute_import, division, print_function
|
2013-04-10 16:19:11 +00:00
|
|
|
from re import compile, escape, IGNORECASE
|
2015-04-26 09:52:31 +00:00
|
|
|
from ..scraper import _BasicScraper, _ParserScraper
|
2012-10-11 10:03:12 +00:00
|
|
|
from ..helpers import indirectStarter
|
2014-07-23 18:53:59 +00:00
|
|
|
from ..util import tagre
|
2016-04-01 22:14:31 +00:00
|
|
|
from .common import _WordPressScraper
|
2012-06-20 19:58:13 +00:00
|
|
|
|
|
|
|
|
2013-02-06 21:27:40 +00:00
|
|
|
class TheBrads(_BasicScraper):
|
|
|
|
url = 'http://bradcolbow.com/archive/C4/'
|
2013-04-10 21:57:09 +00:00
|
|
|
stripUrl = url + '%s/'
|
|
|
|
firstStripUrl = stripUrl % 'P125'
|
2013-03-07 18:54:18 +00:00
|
|
|
imageSearch = compile(tagre("img", "src", r'(http://s3\.amazonaws\.com/the_brads/the-?brads[-_][^"]+)'))
|
2013-02-06 21:27:40 +00:00
|
|
|
prevSearch = compile(tagre("a", "href", r'(http://bradcolbow\.com/archive/C4/[^"]+)', before="prev"))
|
|
|
|
multipleImagesPerStrip = True
|
|
|
|
help = 'Index format: a letter and a number'
|
|
|
|
|
|
|
|
|
2012-12-08 20:30:51 +00:00
|
|
|
class TheDevilsPanties(_BasicScraper):
|
2013-02-04 20:00:26 +00:00
|
|
|
url = 'http://thedevilspanties.com/'
|
|
|
|
stripUrl = url + 'archives/%s'
|
2013-04-10 21:57:09 +00:00
|
|
|
firstStripUrl = stripUrl % '300'
|
2012-12-08 20:30:51 +00:00
|
|
|
imageSearch = compile(tagre("img", "src", r'(http://cdn\.thedevilspanties\.com/comics/[^"]+)'))
|
2016-03-31 21:13:54 +00:00
|
|
|
prevSearch = compile(tagre("a", "href", r'(/archives/\d+)',
|
|
|
|
after="Previous"))
|
2012-12-08 20:30:51 +00:00
|
|
|
help = 'Index format: number'
|
|
|
|
|
|
|
|
|
2016-04-01 22:14:31 +00:00
|
|
|
class TheDreamlandChronicles(_WordPressScraper):
|
|
|
|
url = 'http://www.thedreamlandchronicles.com/'
|
|
|
|
|
|
|
|
|
2015-04-26 09:52:31 +00:00
|
|
|
class TheGamerCat(_ParserScraper):
|
|
|
|
url = "http://www.thegamercat.com/"
|
|
|
|
stripUrl = url + "comic/%s/"
|
|
|
|
firstStripUrl = stripUrl % "06102011"
|
|
|
|
css = True
|
|
|
|
imageSearch = '#comic img'
|
|
|
|
prevSearch = '.comic-nav-previous'
|
|
|
|
help = 'Index format: stripname'
|
2013-04-25 19:20:48 +00:00
|
|
|
|
2014-01-31 03:32:07 +00:00
|
|
|
|
2016-04-01 22:14:31 +00:00
|
|
|
class TheGentlemansArmchair(_WordPressScraper):
|
|
|
|
url = 'http://thegentlemansarmchair.com/'
|
|
|
|
|
|
|
|
|
2014-02-18 20:00:43 +00:00
|
|
|
class TheLandscaper(_BasicScraper):
|
|
|
|
url = 'http://landscaper.visual-assault.net/comic/latest'
|
|
|
|
rurl = escape(url)
|
|
|
|
stripUrl = url + 'comic/%s'
|
|
|
|
firstStripUrl = stripUrl % '1'
|
2016-03-31 21:13:54 +00:00
|
|
|
imageSearch = compile(tagre("img", "src",
|
|
|
|
r'(/comics/comic/comic_page/[^"]+)'))
|
|
|
|
prevSearch = compile(tagre("a", "href", r'(/comic/[^"]+)') +
|
|
|
|
'‹ Previous')
|
2014-02-18 20:00:43 +00:00
|
|
|
help = 'Index format: name'
|
|
|
|
|
2016-03-31 21:13:54 +00:00
|
|
|
|
2016-04-01 22:14:31 +00:00
|
|
|
class TheMelvinChronicles(_WordPressScraper):
|
|
|
|
url = 'http://melvin.jeaniebottle.com/'
|
|
|
|
|
|
|
|
|
2012-06-20 19:58:13 +00:00
|
|
|
class TheNoob(_BasicScraper):
|
2013-02-04 20:00:26 +00:00
|
|
|
url = 'http://www.thenoobcomic.com/index.php'
|
|
|
|
stripUrl = url + '?pos=%s'
|
2013-04-10 21:57:09 +00:00
|
|
|
firstStripUrl = stripUrl % '1'
|
2012-11-25 06:56:46 +00:00
|
|
|
imageSearch = compile(tagre("img", "src", r'(/headquarters/comics/[^"]+)'))
|
2016-03-31 21:13:54 +00:00
|
|
|
prevSearch = compile(tagre("a", "href", r'(\?pos=\d+)',
|
|
|
|
before="comic_nav_previous_button"))
|
2012-06-20 19:58:13 +00:00
|
|
|
help = 'Index format: nnnn'
|
|
|
|
|
|
|
|
|
|
|
|
class TheOrderOfTheStick(_BasicScraper):
|
2016-04-12 21:11:39 +00:00
|
|
|
url = 'http://www.giantitp.com/'
|
|
|
|
stripUrl = url + 'comics/oots%s.html'
|
2013-04-10 21:57:09 +00:00
|
|
|
firstStripUrl = stripUrl % '0001'
|
2012-12-07 23:45:18 +00:00
|
|
|
imageSearch = compile(r'<IMG src="(/comics/images/[^"]+)">')
|
2012-06-20 19:58:13 +00:00
|
|
|
prevSearch = compile(r'<A href="(/comics/oots\d{4}\.html)"><IMG src="/Images/redesign/ComicNav_Back.gif"')
|
2016-04-12 21:11:39 +00:00
|
|
|
latestSearch = compile(r'<A href="(/comics/oots\d{4}\.html)"')
|
2012-06-20 19:58:13 +00:00
|
|
|
help = 'Index format: n (unpadded)'
|
2016-04-13 18:01:51 +00:00
|
|
|
starter = indirectStarter
|
2012-06-20 19:58:13 +00:00
|
|
|
|
2016-04-21 06:20:49 +00:00
|
|
|
def namer(self, image_url, page_url):
|
|
|
|
return page_url.rsplit('/', 1)[-1][:-5]
|
2012-06-20 19:58:13 +00:00
|
|
|
|
|
|
|
|
|
|
|
class TheParkingLotIsFull(_BasicScraper):
|
2013-04-13 18:58:00 +00:00
|
|
|
baseUrl = 'http://plif.courageunfettered.com/'
|
|
|
|
url = baseUrl + 'archive/arch2002.htm'
|
|
|
|
stripUrl = baseUrl + 'archive/arch%s.htm'
|
2013-04-10 21:57:09 +00:00
|
|
|
firstStripUrl = stripUrl % '1998'
|
2012-06-20 19:58:13 +00:00
|
|
|
imageSearch = compile(r'<td align="center"><A TARGET=_parent HREF="(wc\d+\..+?)">')
|
2012-12-04 06:02:40 +00:00
|
|
|
multipleImagesPerStrip = True
|
|
|
|
prevSearch = compile(r'\d{4} -\s+<A HREF="(arch\d{4}\.htm)">\d{4}')
|
2012-06-20 19:58:13 +00:00
|
|
|
help = 'Index format: nnn'
|
|
|
|
|
|
|
|
|
2016-03-31 21:13:54 +00:00
|
|
|
class TheThinHLine(_BasicScraper):
|
|
|
|
url = 'http://thinhline.tumblr.com/'
|
|
|
|
rurl = escape(url)
|
|
|
|
stripUrl = url + 'post/%s'
|
|
|
|
firstStripUrl = stripUrl % '3517345105'
|
2016-04-12 21:11:39 +00:00
|
|
|
imageSearch = compile(tagre('img', 'data-src',
|
|
|
|
r'([^"]+media.tumblr.com/[^"]+)',
|
|
|
|
before='content-image'))
|
2016-03-31 21:13:54 +00:00
|
|
|
prevSearch = compile(tagre("a", "href", r'([^"]+)') + '></a>')
|
2016-04-12 21:11:39 +00:00
|
|
|
latestSearch = compile(tagre("a", "href", r'([^"]+)',
|
|
|
|
after='class="timestamp"'))
|
2016-04-13 18:01:51 +00:00
|
|
|
starter = indirectStarter
|
2016-03-31 21:13:54 +00:00
|
|
|
adult = True
|
|
|
|
|
|
|
|
indirectImageSearch = compile(tagre('a', 'href', r'(%simage/\d+)' % rurl))
|
|
|
|
|
|
|
|
def getComicStrip(self, url, data):
|
|
|
|
"""The comic strip image is in a separate page."""
|
|
|
|
pageUrl = self.fetchUrl(url, data, self.indirectImageSearch)
|
|
|
|
pageData = self.getPage(pageUrl)
|
|
|
|
return super(TheThinHLine, self).getComicStrip(pageUrl, pageData)
|
|
|
|
|
2016-04-21 06:20:49 +00:00
|
|
|
def namer(self, image_url, page_url):
|
2016-03-31 21:13:54 +00:00
|
|
|
"""Use page URL sequence which is apparently increasing."""
|
2016-04-21 06:20:49 +00:00
|
|
|
num = page_url.split('/')[-1]
|
|
|
|
ext = image_url.rsplit('.', 1)[1]
|
2016-03-31 21:13:54 +00:00
|
|
|
return "thethinhline-%s.%s" % (num, ext)
|
|
|
|
|
|
|
|
|
|
|
|
class TheWhiteboard(_BasicScraper):
|
|
|
|
url = 'http://www.the-whiteboard.com/'
|
|
|
|
stripUrl = url + 'auto%s.html'
|
|
|
|
imageSearch = compile(r'<img SRC="(autotwb\d{1,4}.+?|autowb\d{1,4}.+?)">', IGNORECASE)
|
|
|
|
prevSearch = compile(r' <a href="(.+?)">previous</a>', IGNORECASE)
|
|
|
|
help = 'Index format: twb or wb + n wg. twb1000'
|
|
|
|
|
|
|
|
|
2012-06-20 19:58:13 +00:00
|
|
|
class TheWotch(_BasicScraper):
|
2013-02-04 20:00:26 +00:00
|
|
|
url = 'http://www.thewotch.com/'
|
|
|
|
stripUrl = url + '?date=%s'
|
2013-04-10 21:57:09 +00:00
|
|
|
firstStripUrl = stripUrl % '2002-11-21'
|
2012-06-20 19:58:13 +00:00
|
|
|
imageSearch = compile(r"<img.+?src='(comics/.+?)'")
|
2012-12-04 06:02:40 +00:00
|
|
|
prevSearch = compile(r"<link rel='Previous' href='(/\?date=\d+-\d+-\d+)'")
|
2012-06-20 19:58:13 +00:00
|
|
|
help = 'Index format: yyyy-mm-dd'
|
|
|
|
|
|
|
|
|
2013-02-06 21:08:36 +00:00
|
|
|
class ThisIsIndexed(_BasicScraper):
|
|
|
|
url = 'http://thisisindexed.com/'
|
2013-04-10 16:19:11 +00:00
|
|
|
rurl = escape(url)
|
2013-02-06 21:08:36 +00:00
|
|
|
stripUrl = url + 'page/%s'
|
2013-04-10 16:19:11 +00:00
|
|
|
imageSearch = compile(tagre("img", "src", r'(%swp-content/uploads/\d+/\d+/card[^"]+)' % rurl))
|
2013-02-06 21:08:36 +00:00
|
|
|
multipleImagesPerStrip = True
|
|
|
|
prevSearch = compile(tagre("div", "class", "nav-previous") +
|
2013-04-11 16:27:43 +00:00
|
|
|
tagre("a", "href", r'(%spage/\d+/)[^"]*' % rurl))
|
2013-02-06 21:08:36 +00:00
|
|
|
help = 'Index format: number'
|
|
|
|
|
|
|
|
|
2016-03-31 21:13:54 +00:00
|
|
|
class ThreePanelSoul(_BasicScraper):
|
|
|
|
url = 'http://threepanelsoul.com/'
|
|
|
|
rurl = escape(url)
|
|
|
|
stripUrl = url + '%s/'
|
|
|
|
firstStripUrl = stripUrl % '2006/05/11/a-test-comic'
|
|
|
|
imageSearch = compile(tagre("img", "src", r'(%scomics/[^"]+)' % rurl))
|
|
|
|
prevSearch = compile(tagre("a", "href", r'(%s\d+/\d+/\d+/[^"]+)' % rurl, after="prev"))
|
|
|
|
help = 'Index format: yyyy/mm/dd/stripname'
|
|
|
|
|
|
|
|
|
2013-02-06 21:08:36 +00:00
|
|
|
class ToonHole(_BasicScraper):
|
|
|
|
url = 'http://www.toonhole.com/'
|
2013-04-10 16:19:11 +00:00
|
|
|
rurl = escape(url)
|
2013-02-06 21:08:36 +00:00
|
|
|
stripUrl = url + '%s/'
|
2013-04-10 21:57:09 +00:00
|
|
|
firstStripUrl = stripUrl % '2009/12/toon-hole-coming-soon-2010'
|
2013-04-10 16:19:11 +00:00
|
|
|
imageSearch = compile(tagre("img", "src", r'(%scomics/\d+-\d+-\d+[^"]+)' % rurl))
|
|
|
|
prevSearch = compile(tagre("a", "href", r'(%s\d+/\d+/[^"]+)' % rurl, after="prev"))
|
2013-02-06 21:08:36 +00:00
|
|
|
help = 'Index format: yyyy/mm/stripname'
|
|
|
|
|
2014-02-10 20:58:09 +00:00
|
|
|
def shouldSkipUrl(self, url, data):
|
2013-03-08 05:47:00 +00:00
|
|
|
return url in (self.stripUrl % "2013/03/if-game-of-thrones-was-animated",)
|
2013-03-07 17:22:24 +00:00
|
|
|
|
2013-02-06 21:08:36 +00:00
|
|
|
|
2012-12-08 20:30:51 +00:00
|
|
|
class TracyAndTristan(_BasicScraper):
|
2013-02-04 20:00:26 +00:00
|
|
|
url = 'http://tandt.thecomicseries.com/'
|
2013-04-10 16:19:11 +00:00
|
|
|
rurl = escape(url)
|
2013-02-04 20:00:26 +00:00
|
|
|
stripUrl = url + 'comics/%s'
|
2013-04-10 16:19:11 +00:00
|
|
|
imageSearch = compile(tagre("img", "src", r'(%simages/comics/[^"]+)' % rurl))
|
2012-12-08 20:30:51 +00:00
|
|
|
prevSearch = compile(tagre("a", "href", r'(/comics/\d+)', after="prev"))
|
|
|
|
help = 'Index format: number'
|
2013-04-25 19:23:31 +00:00
|
|
|
|
|
|
|
|
|
|
|
class TwoGuysAndGuy(_BasicScraper):
|
|
|
|
url = 'http://www.twogag.com/'
|
|
|
|
rurl = escape(url)
|
|
|
|
stripUrl = url + 'archives/%s'
|
|
|
|
firstStripUrl = stripUrl % '4'
|
|
|
|
imageSearch = compile(tagre('img', 'src', r'(%scomics/\d{4}-\d{2}-\d{2}[^"]*)' % rurl))
|
2016-03-31 21:13:54 +00:00
|
|
|
prevSearch = compile(tagre('a', 'href', r'(%sarchives/\d+)' % rurl,
|
|
|
|
after='title="Previous"'))
|
2013-04-25 19:23:31 +00:00
|
|
|
help = 'Index format: number'
|
|
|
|
adult = True
|
2016-03-31 21:13:54 +00:00
|
|
|
|
|
|
|
|
|
|
|
class TwoLumps(_BasicScraper):
|
|
|
|
url = 'http://www.twolumps.net/'
|
|
|
|
stripUrl = url + 'd/%s.html'
|
|
|
|
imageSearch = compile(tagre("img", "src", r'(/comics/[^"]+)'))
|
|
|
|
prevSearch = compile(tagre("a", "href", r'(/d/\d+\.html)', after="prev"))
|
|
|
|
help = 'Index format: yyyymmdd'
|