diff --git a/gallery_dl/extractor/batoto.py b/gallery_dl/extractor/batoto.py index 6d54f63d..c3a4df98 100644 --- a/gallery_dl/extractor/batoto.py +++ b/gallery_dl/extractor/batoto.py @@ -63,7 +63,7 @@ class BatotoExtractor(): def parse_chapter_string(data): """Parse 'chapter_string' value contained in 'data'""" data["chapter_string"] = text.unescape(data["chapter_string"]) - pattern = r"(?:Vol.(\d+) )?Ch\.(\d+)([^ :]*)(?::? (.+))" + pattern = r"(?:Vol\.(\d+) )?Ch\.(\d+)([^ :]*)(?::? (.+))" match = re.match(pattern, data["chapter_string"]) volume, chapter, data["chapter_minor"], title = match.groups() @@ -75,7 +75,8 @@ class BatotoExtractor(): class BatotoMangaExtractor(BatotoExtractor, MangaExtractor): """Extractor for manga from bato.to""" - pattern = [r"(?:https?://)?(?:www\.)?(bato\.to/comic/_/comics/.*-r\d+)"] + pattern = [r"(?:https?://)?(?:www\.)?(bato\.to" + r"/comic/_/comics/[^/?&#]*-r\d+)"] test = [("http://bato.to/comic/_/comics/aria-r2007", { "url": "a38585b0339587666d772ee06f2a60abdbf42a97", "keyword": "c33ea7b97e3714530384e2411fae62ae51aae50d", diff --git a/gallery_dl/extractor/imagebam.py b/gallery_dl/extractor/imagebam.py index 01d05886..71f77dbc 100644 --- a/gallery_dl/extractor/imagebam.py +++ b/gallery_dl/extractor/imagebam.py @@ -18,7 +18,7 @@ class ImagebamGalleryExtractor(AsynchronousExtractor): subcategory = "gallery" directory_fmt = ["{category}", "{title} - {gallery_key}"] filename_fmt = "{num:>03}-{filename}" - pattern = [r"(?:https?://)?(?:www\.)?imagebam\.com/gallery/([^/]+).*"] + pattern = [r"(?:https?://)?(?:www\.)?imagebam\.com/gallery/([^/]+)"] test = [(("http://www.imagebam.com/" "gallery/adz2y0f9574bjpmonaismyrhtjgvey4o"), { "url": "d7a4483b6d5ebba81950a349aad58ae034c60eda", diff --git a/gallery_dl/extractor/imagehosts.py b/gallery_dl/extractor/imagehosts.py index d78b3d90..9b8652a5 100644 --- a/gallery_dl/extractor/imagehosts.py +++ b/gallery_dl/extractor/imagehosts.py @@ -242,7 +242,7 @@ class ImagevenueImageExtractor(ImagehostImageExtractor): """Extractor for single images from imagevenue.com""" category = "imagevenue" pattern = [(r"(?:https?://)?(img\d+\.imagevenue\.com/" - r"img\.php\?image=(\d+)_.+)")] + r"img\.php\?image=(\d+)_[^&#]+)")] params = None def get_info(self, page): diff --git a/gallery_dl/extractor/khinsider.py b/gallery_dl/extractor/khinsider.py index 78ac474e..faef128a 100644 --- a/gallery_dl/extractor/khinsider.py +++ b/gallery_dl/extractor/khinsider.py @@ -18,7 +18,7 @@ class KhinsiderSoundtrackExtractor(AsynchronousExtractor): subcategory = "soundtrack" directory_fmt = ["{category}", "{album}"] pattern = [r"(?:https?://)?downloads\.khinsider\.com/" - r"game-soundtracks/album/(.+)"] + r"game-soundtracks/album/([^/?&#]+)"] test = [(("http://downloads.khinsider.com/game-soundtracks/" "album/horizon-riders-wii-"), { "pattern": ("https?://\d+\.\d+\.\d+\.\d+/ost/horizon-riders-wii-/" diff --git a/gallery_dl/extractor/kissmanga.py b/gallery_dl/extractor/kissmanga.py index 66209ff5..bf08a1b3 100644 --- a/gallery_dl/extractor/kissmanga.py +++ b/gallery_dl/extractor/kissmanga.py @@ -65,7 +65,8 @@ class KissmangaExtractor(Extractor): class KissmangaMangaExtractor(KissmangaExtractor, MangaExtractor): """Extractor for manga from kissmanga.com""" - pattern = [r"(?i)(?:https?://)?(?:www\.)?kissmanga\.com/Manga/[^/]+/?$"] + pattern = [r"(?i)(?:https?://)?(?:www\.)?kissmanga\.com/" + r"Manga/[^/?&#]+/?$"] test = [ ("http://kissmanga.com/Manga/Dropout", { "url": "992befdd64e178fe5af67de53f8b510860d968ca", @@ -98,7 +99,7 @@ class KissmangaChapterExtractor(KissmangaExtractor): """Extractor for manga-chapters from kissmanga.com""" subcategory = "chapter" pattern = [r"(?i)(?:https?://)?(?:www\.)?kissmanga\.com/" - r"Manga/.+/.+\?id=\d+"] + r"Manga/[^/?&#]+/[^/?&#]+\?id=\d+"] test = [ ("http://kissmanga.com/Manga/Dropout/Ch-000---Oneshot-?id=145847", { "url": "4136bcd1c6cecbca8cc2bc965d54f33ef0a97cc0", diff --git a/gallery_dl/extractor/mangapanda.py b/gallery_dl/extractor/mangapanda.py index ef778cc7..cf16d125 100644 --- a/gallery_dl/extractor/mangapanda.py +++ b/gallery_dl/extractor/mangapanda.py @@ -19,7 +19,7 @@ class MangapandaBase(): class MangapandaMangaExtractor(MangapandaBase, MangareaderMangaExtractor): """Extractor for manga from mangapanda.com""" - pattern = [r"(?:https?://)?((?:www\.)?mangapanda\.com/[^/]+)/?$"] + pattern = [r"(?:https?://)?((?:www\.)?mangapanda\.com/[^/?&#]+)/?$"] test = [("http://www.mangapanda.com/mushishi", { "url": "50a1ba730b85426b904da256c80f68ba6a8a2566", "keyword": "031b3ea085921c552de017ecbb9b906e462229c9", @@ -29,9 +29,9 @@ class MangapandaMangaExtractor(MangapandaBase, MangareaderMangaExtractor): class MangapandaChapterExtractor(MangapandaBase, MangareaderChapterExtractor): """Extractor for manga-chapters from mangapanda.com""" pattern = [ - (r"(?:https?://)?(?:www\.)?mangapanda\.com((/[^/]+)/(\d+))"), + (r"(?:https?://)?(?:www\.)?mangapanda\.com((/[^/?&#]+)/(\d+))"), (r"(?:https?://)?(?:www\.)?mangapanda\.com" - r"(/\d+-\d+-\d+(/[^/]+)/chapter-(\d+).html)"), + r"(/\d+-\d+-\d+(/[^/]+)/chapter-(\d+)\.html)"), ] test = [("http://www.mangapanda.com/red-storm/2", { "url": "4bf4ddf6c50105ec8a37675495ab80c46608275d", diff --git a/gallery_dl/extractor/mangareader.py b/gallery_dl/extractor/mangareader.py index b0d990c5..49a13df2 100644 --- a/gallery_dl/extractor/mangareader.py +++ b/gallery_dl/extractor/mangareader.py @@ -34,7 +34,7 @@ class MangareaderBase(): class MangareaderMangaExtractor(MangareaderBase, MangaExtractor): """Extractor for manga from mangareader.net""" - pattern = [r"(?:https?://)?((?:www\.)?mangareader\.net/[^/]+)/?$"] + pattern = [r"(?:https?://)?((?:www\.)?mangareader\.net/[^/?&#]+)/?$"] reverse = False test = [("http://www.mangareader.net/mushishi", { "url": "249042420b67a07b32e7f6be4c7410b6d810b808", @@ -63,9 +63,9 @@ class MangareaderChapterExtractor(MangareaderBase, AsynchronousExtractor): directory_fmt = ["{category}", "{manga}", "c{chapter:>03}{title:?: //}"] filename_fmt = "{manga}_c{chapter:>03}_{page:>03}.{extension}" pattern = [ - (r"(?:https?://)?(?:www\.)?mangareader\.net((/[^/]+)/(\d+))"), - (r"(?:https?://)?(?:www\.)?mangareader\.net(/\d+-\d+-\d+(/[^/]+)/" - r"chapter-(\d+).html)"), + (r"(?:https?://)?(?:www\.)?mangareader\.net((/[^/?&#]+)/(\d+))"), + (r"(?:https?://)?(?:www\.)?mangareader\.net" + r"(/\d+-\d+-\d+(/[^/]+)/chapter-(\d+)\.html)"), ] test = [(("http://www.mangareader.net/" "karate-shoukoushi-kohinata-minoru/11"), { diff --git a/gallery_dl/extractor/readcomiconline.py b/gallery_dl/extractor/readcomiconline.py index db72d619..0b44ddf2 100644 --- a/gallery_dl/extractor/readcomiconline.py +++ b/gallery_dl/extractor/readcomiconline.py @@ -25,7 +25,8 @@ class ReadcomiconlineComicExtractor(ReadcomiconlineExtractor, kissmanga.KissmangaMangaExtractor): """Extractor for comics from readcomiconline.to""" subcategory = "comic" - pattern = [r"(?:https?://)?(?:www\.)?readcomiconline\.to/Comic/[^/]+/?$"] + pattern = [r"(?i)(?:https?://)?(?:www\.)?readcomiconline\.to/" + r"Comic/[^/?&#]+/?$"] test = [ ("http://readcomiconline.to/Comic/W-i-t-c-h", { "url": "c5a530538a30b176916e30cbe223a93d83cb2691", @@ -57,8 +58,8 @@ class ReadcomiconlineIssueExtractor(ReadcomiconlineExtractor, kissmanga.KissmangaChapterExtractor): """Extractor for comic-issues from readcomiconline.to""" subcategory = "issue" - pattern = [r"(?:https?://)?(?:www\.)?readcomiconline\.to/" - r"Comic/.+/.+\?id=\d+"] + pattern = [r"(?i)(?:https?://)?(?:www\.)?readcomiconline\.to/" + r"Comic/[^/?&#]+/[^/?&#]+\?id=\d+"] test = [("http://readcomiconline.to/Comic/W-i-t-c-h/Issue-130?id=22289", { "url": "a45c77f8fbde66091fe2346d6341f9cf3c6b1bc5", "keyword": "dee8a8a44659825afe1d69e1d809a48b03e98c68",