diff --git a/docs/configuration.rst b/docs/configuration.rst index 8d061e84..1ab6d687 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -1778,16 +1778,6 @@ Description * ``false``: Match only URLs with known TLDs -extractor.chzzk.offset ----------------------- -Type - ``integer`` -Default - ``0`` -Description - Custom ``offset`` starting value when paginating over comments. - - extractor.cien.files -------------------- Type @@ -3634,8 +3624,8 @@ Description Note: Not supported by all ``moebooru`` instances. -extractor.naver.videos ----------------------- +extractor.naver-blog.videos +--------------------------- Type ``bool`` Default @@ -3644,6 +3634,16 @@ Description Download videos. +extractor.naver-chzzk.offset +---------------------------- +Type + ``integer`` +Default + ``0`` +Description + Custom ``offset`` starting value when paginating over comments. + + extractor.newgrounds.flash -------------------------- Type @@ -7692,7 +7692,10 @@ Description { "coomer" : "coomerparty", "kemono" : "kemonoparty", - "schalenetwork": "koharu" + "schalenetwork": "koharu", + "naver-chzzk" : "chzzk", + "naver-blog" : "naver", + "naver-webtoon": "naverwebtoon" } @@ -7704,9 +7707,12 @@ Default .. code:: json { - "coomerparty": "coomer", - "kemonoparty": "kemono", - "koharu" : "schalenetwork" + "coomerparty" : "coomer", + "kemonoparty" : "kemono", + "koharu" : "schalenetwork", + "chzzk" : "naver-chzzk", + "naver" : "naver-blog", + "naverwebtoon": "naver-webtoon" } Description Duplicate the configuration settings of extractor `categories` diff --git a/docs/gallery-dl.conf b/docs/gallery-dl.conf index fda75afe..b96eae27 100644 --- a/docs/gallery-dl.conf +++ b/docs/gallery-dl.conf @@ -90,9 +90,12 @@ "category-map": {}, "config-map": { - "coomerparty": "coomer", - "kemonoparty": "kemono", - "koharu" : "schalenetwork" + "coomerparty" : "coomer", + "kemonoparty" : "kemono", + "koharu" : "schalenetwork", + "chzzk" : "naver-chzzk", + "naver" : "naver-blog", + "naverwebtoon": "naver-webtoon" }, @@ -182,10 +185,6 @@ "endpoint": "/api/_001_v2", "tlds": false }, - "chzzk": - { - "offset": 0 - }, "cien": { "sleep-request": "1.0-2.0", @@ -456,10 +455,14 @@ "username": "", "password": "" }, - "naver": + "naver-blog": { "videos": true }, + "naver-chzzk": + { + "offset": 0 + }, "newgrounds": { "username": "", diff --git a/docs/options.md b/docs/options.md index 0eeab8fb..18c106b3 100644 --- a/docs/options.md +++ b/docs/options.md @@ -133,7 +133,7 @@ 500k or 2.5M) --filesize-max SIZE Do not download files larger than SIZE (e.g. 500k or 2.5M) - --download-archive FILE Record all downloaded or skipped files in FILE + --download-archive FILE Record successfully downloaded files in FILE and skip downloading any file already in it --range RANGE Index range(s) specifying which files to download. These can be either a constant value, diff --git a/docs/supportedsites.md b/docs/supportedsites.md index ff0992d2..2c666543 100644 --- a/docs/supportedsites.md +++ b/docs/supportedsites.md @@ -170,8 +170,8 @@ Consider all listed sites to potentially be NSFW. - Chzzk - https://chzzk.naver.com + CHZZK + https://chzzk.naver.com/ Comments, Communities @@ -626,13 +626,13 @@ Consider all listed sites to potentially be NSFW. - Naver + Naver Blog https://blog.naver.com/ Blogs, Posts - NaverWebtoon + Naver Webtoon https://comic.naver.com/ Comics, Episodes @@ -836,7 +836,7 @@ Consider all listed sites to potentially be NSFW. - rule #34 + Rule 34 https://rule34.paheal.net/ Posts, Tag Searches @@ -1104,7 +1104,7 @@ Consider all listed sites to potentially be NSFW. - Webtoon + WEBTOON https://www.webtoons.com/ Artists, Comics, Episodes diff --git a/gallery_dl/__init__.py b/gallery_dl/__init__.py index 8ed98070..be0f6dee 100644 --- a/gallery_dl/__init__.py +++ b/gallery_dl/__init__.py @@ -323,6 +323,9 @@ def main(): "coomer" : "coomerparty", "kemono" : "kemonoparty", "schalenetwork": "koharu", + "naver-blog" : "naver", + "naver-chzzk" : "chzzk", + "naver-webtoon": "naverwebtoon", } from .extractor import common common.CATEGORY_MAP = catmap diff --git a/gallery_dl/config.py b/gallery_dl/config.py index 5229b547..1eeda8c4 100644 --- a/gallery_dl/config.py +++ b/gallery_dl/config.py @@ -169,9 +169,12 @@ def remap_categories(): cmap = opts.get("config-map") if cmap is None: cmap = ( - ("coomerparty", "coomer"), - ("kemonoparty", "kemono"), - ("koharu" , "schalenetwork"), + ("coomerparty" , "coomer"), + ("kemonoparty" , "kemono"), + ("koharu" , "schalenetwork"), + ("naver" , "naver-blog"), + ("chzzk" , "naver-chzzk"), + ("naverwebtoon", "naver-webtoon"), ) elif not cmap: return diff --git a/gallery_dl/extractor/__init__.py b/gallery_dl/extractor/__init__.py index 9bafef03..03a4444b 100644 --- a/gallery_dl/extractor/__init__.py +++ b/gallery_dl/extractor/__init__.py @@ -38,7 +38,6 @@ modules = [ "bunkr", "catbox", "chevereto", - "chzzk", "cien", "civitai", "comick", @@ -117,7 +116,8 @@ modules = [ "motherless", "myhentaigallery", "myportfolio", - "naver", + "naverblog", + "naverchzzk", "naverwebtoon", "nekohouse", "newgrounds", diff --git a/gallery_dl/extractor/naver.py b/gallery_dl/extractor/naverblog.py similarity index 95% rename from gallery_dl/extractor/naver.py rename to gallery_dl/extractor/naverblog.py index 2758ae44..e09e3347 100644 --- a/gallery_dl/extractor/naver.py +++ b/gallery_dl/extractor/naverblog.py @@ -14,13 +14,13 @@ import datetime import time -class NaverBase(): - """Base class for naver extractors""" - category = "naver" +class NaverBlogBase(): + """Base class for blog.naver.com extractors""" + category = "naver-blog" root = "https://blog.naver.com" -class NaverPostExtractor(NaverBase, GalleryExtractor): +class NaverBlogPostExtractor(NaverBlogBase, GalleryExtractor): """Extractor for blog posts on blog.naver.com""" subcategory = "post" filename_fmt = "{num:>03}.{extension}" @@ -123,7 +123,7 @@ class NaverPostExtractor(NaverBase, GalleryExtractor): files.append((video["source"], video)) -class NaverBlogExtractor(NaverBase, Extractor): +class NaverBlogBlogExtractor(NaverBlogBase, Extractor): """Extractor for a user's blog on blog.naver.com""" subcategory = "blog" categorytransfer = True @@ -165,7 +165,7 @@ class NaverBlogExtractor(NaverBase, Extractor): for post in data["postList"]: post["url"] = (f"{self.root}/PostView.nhn?blogId=" f"{self.blog_id}&logNo={post['logNo']}") - post["_extractor"] = NaverPostExtractor + post["_extractor"] = NaverBlogPostExtractor yield Message.Queue, post["url"], post if not data["hasNextPage"]: diff --git a/gallery_dl/extractor/chzzk.py b/gallery_dl/extractor/naverchzzk.py similarity index 91% rename from gallery_dl/extractor/chzzk.py rename to gallery_dl/extractor/naverchzzk.py index ed2e0f48..de4ee7ac 100644 --- a/gallery_dl/extractor/chzzk.py +++ b/gallery_dl/extractor/naverchzzk.py @@ -4,15 +4,15 @@ # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation. -"""Extractors for https://chzzk.naver.com""" +"""Extractors for https://chzzk.naver.com/""" from .common import Extractor, Message from .. import text, util -class ChzzkExtractor(Extractor): - """Base class for chzzk extractors""" - category = "chzzk" +class NaverChzzkExtractor(Extractor): + """Base class for chzzk.naver.com extractors""" + category = "naver-chzzk" filename_fmt = "{uid}_{id}_{num}.{extension}" directory_fmt = ("{category}", "{user[userNickname]}") archive_fmt = "{uid}_{id}_{num}" @@ -47,7 +47,7 @@ class ChzzkExtractor(Extractor): yield Message.Url, url, text.nameext_from_url(url, data) -class ChzzkCommentExtractor(ChzzkExtractor): +class NaverChzzkCommentExtractor(NaverChzzkExtractor): """Extractor for individual comment from chzzk.naver.com""" subcategory = "comment" pattern = r"(?:https?://)?chzzk\.naver\.com/(\w+)/community/detail/(\d+)" @@ -59,7 +59,7 @@ class ChzzkCommentExtractor(ChzzkExtractor): return ({"comment": res["comment"], "user": res["user"]},) -class ChzzkCommunityExtractor(ChzzkExtractor): +class NaverChzzkCommunityExtractor(NaverChzzkExtractor): """Extractor for comments from chzzk.naver.com""" subcategory = "community" pattern = r"(?:https?://)?chzzk\.naver\.com/(\w+)/community" diff --git a/gallery_dl/extractor/naverwebtoon.py b/gallery_dl/extractor/naverwebtoon.py index 237692de..3211941c 100644 --- a/gallery_dl/extractor/naverwebtoon.py +++ b/gallery_dl/extractor/naverwebtoon.py @@ -16,13 +16,13 @@ BASE_PATTERN = (r"(?:https?://)?comic\.naver\.com" r"/(webtoon|challenge|bestChallenge)") -class NaverwebtoonBase(): - """Base class for naver webtoon extractors""" - category = "naverwebtoon" +class NaverWebtoonBase(): + """Base class for comic.naver.com extractors""" + category = "naver-webtoon" root = "https://comic.naver.com" -class NaverwebtoonEpisodeExtractor(NaverwebtoonBase, GalleryExtractor): +class NaverWebtoonEpisodeExtractor(NaverWebtoonBase, GalleryExtractor): subcategory = "episode" directory_fmt = ("{category}", "{comic}") filename_fmt = "{episode:>03}-{num:>02}.{extension}" @@ -63,7 +63,7 @@ class NaverwebtoonEpisodeExtractor(NaverwebtoonBase, GalleryExtractor): ] -class NaverwebtoonComicExtractor(NaverwebtoonBase, Extractor): +class NaverWebtoonComicExtractor(NaverWebtoonBase, Extractor): subcategory = "comic" categorytransfer = True pattern = BASE_PATTERN + r"/list(?:\.nhn)?\?([^#]+)" @@ -95,7 +95,7 @@ class NaverwebtoonComicExtractor(NaverwebtoonBase, Extractor): base = f"{self.root}/{path}/detail?titleId={data['titleId']}&no=" for article in data["articleList"]: - article["_extractor"] = NaverwebtoonEpisodeExtractor + article["_extractor"] = NaverWebtoonEpisodeExtractor yield Message.Queue, base + str(article["no"]), article params["page"] = data["pageInfo"]["nextPage"] diff --git a/scripts/supportedsites.py b/scripts/supportedsites.py index f9feedd1..b4f00d3d 100755 --- a/scripts/supportedsites.py +++ b/scripts/supportedsites.py @@ -109,14 +109,16 @@ CATEGORY_MAP = { "myhentaigallery": "My Hentai Gallery", "myportfolio" : "Adobe Portfolio", "natomanga" : "MangaNato", - "naverwebtoon" : "NaverWebtoon", + "naver-blog" : "Naver Blog", + "naver-chzzk" : "CHZZK", + "naver-webtoon" : "Naver Webtoon", "nelomanga" : "MangaNelo", "nhentai" : "nhentai", "nijie" : "nijie", "nozomi" : "Nozomi.la", "nsfwalbum" : "NSFWalbum.com", "nudostar" : "NudoStar.TV", - "paheal" : "rule #34", + "paheal" : "Rule 34", "photovogue" : "PhotoVogue", "pidgiwiki" : "PidgiWiki", "pixeldrain" : "pixeldrain", @@ -163,7 +165,7 @@ CATEGORY_MAP = { "vsco" : "VSCO", "wallpapercave" : "Wallpaper Cave", "webmshare" : "webmshare", - "webtoons" : "Webtoon", + "webtoons" : "WEBTOON", "weebcentral" : "Weeb Central", "wikiart" : "WikiArt.org", "wikigg" : "wiki.gg", diff --git a/test/results/naver.py b/test/results/naverblog.py similarity index 79% rename from test/results/naver.py rename to test/results/naverblog.py index 4c8cca44..b8fc9361 100644 --- a/test/results/naver.py +++ b/test/results/naverblog.py @@ -4,31 +4,58 @@ # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation. -from gallery_dl.extractor import naver +from gallery_dl.extractor import naverblog __tests__ = ( { "#url" : "https://blog.naver.com/rlfqjxm0/221430673006", - "#category": ("", "naver", "post"), - "#class" : naver.NaverPostExtractor, + "#class" : naverblog.NaverBlogPostExtractor, "#sha1_url" : "6c694f3aced075ed5e9511f1e796d14cb26619cc", - "#sha1_metadata": "a6e23d19afbee86b37d6e7ad934650c379d2cb1e", + + "count" : 23, + "num" : range(1, 23), + "extension" : {"jpg", "png"}, + "filename" : str, + "blog" : { + "id" : "rlfqjxm0", + "num" : 43030507, + "user": "에나", + }, + "post" : { + "date" : "dt:2018-12-30 23:23:00", + "description": "-", + "num" : 221430673006, + "title" : "그림", + }, }, { "#url" : "https://blog.naver.com/PostView.nhn?blogId=rlfqjxm0&logNo=221430673006", - "#category": ("", "naver", "post"), - "#class" : naver.NaverPostExtractor, + "#class" : naverblog.NaverBlogPostExtractor, "#sha1_url" : "6c694f3aced075ed5e9511f1e796d14cb26619cc", - "#sha1_metadata": "a6e23d19afbee86b37d6e7ad934650c379d2cb1e", + + "count" : 23, + "num" : range(1, 23), + "extension" : {"jpg", "png"}, + "filename" : str, + "blog" : { + "id" : "rlfqjxm0", + "num" : 43030507, + "user": "에나", + }, + "post" : { + "date" : "dt:2018-12-30 23:23:00", + "description": "-", + "num" : 221430673006, + "title" : "그림", + }, }, { "#url" : "https://blog.naver.com/PostView.nhn?blogId=rlfqjxm0&logNo=70161391809", "#comment" : "filenames in EUC-KR encoding (#5126)", - "#category": ("", "naver", "post"), - "#class" : naver.NaverPostExtractor, + "#class" : naverblog.NaverBlogPostExtractor, "#results": ( "https://blogfiles.pstatic.net/20130305_23/ping9303_1362411028002Dpz9z_PNG/1_사본.png", "https://blogfiles.pstatic.net/20130305_46/rlfqjxm0_1362473322580x33zi_PNG/오마갓합작.png", @@ -54,8 +81,7 @@ __tests__ = ( { "#url" : "https://blog.naver.com/jws790103/223239681955", "#comment" : "videos", - "#category": ("", "naver", "post"), - "#class" : naver.NaverPostExtractor, + "#class" : naverblog.NaverBlogPostExtractor, "#pattern" : ( r"https://blogfiles.pstatic.net/MjAyMzA5MjVfMTMy/MDAxNjk1NjQ0MzI4OTE3.UxgvxTesk7Y88OWGvPMwQhbmCPp6mPA_C-5l5lJggyEg.B0DbxNEzz3DxRJtShiiBHDLzLQSCFDo_Bp6c-bcMDiog.JPEG.jws790103/20230925%EF%BC%BF080218.jpg", r"https://blogfiles.pstatic.net/MjAyMzA5MjVfMjAz/MDAxNjk1NjQ0MzI4OTA5.Kd4VzqHhhrgby7rCA1iPdBX6f_k2DPEBnlRdOWD-kPgg.U0C1lmlKVMZMA4hhhs69nolZwCZ4Plme4KVbNfhezhkg.JPEG.jws790103/20230925%EF%BC%BF081103.jpg", @@ -85,8 +111,7 @@ __tests__ = ( { "#url" : "https://blog.naver.com/jws790103/223239681955", "#comment" : "'videos' option", - "#category": ("", "naver", "post"), - "#class" : naver.NaverPostExtractor, + "#class" : naverblog.NaverBlogPostExtractor, "#options" : {"videos": False}, "#results": ( "https://blogfiles.pstatic.net/MjAyMzA5MjVfMTMy/MDAxNjk1NjQ0MzI4OTE3.UxgvxTesk7Y88OWGvPMwQhbmCPp6mPA_C-5l5lJggyEg.B0DbxNEzz3DxRJtShiiBHDLzLQSCFDo_Bp6c-bcMDiog.JPEG.jws790103/20230925%EF%BC%BF080218.jpg", @@ -103,32 +128,28 @@ __tests__ = ( { "#url" : "https://blog.naver.com/PostView.naver?blogId=rlfqjxm0&logNo=221430673006", - "#category": ("", "naver", "post"), - "#class" : naver.NaverPostExtractor, + "#class" : naverblog.NaverBlogPostExtractor, }, { "#url" : "https://blog.naver.com/gukjung", - "#category": ("", "naver", "blog"), - "#class" : naver.NaverBlogExtractor, - "#pattern" : naver.NaverPostExtractor.pattern, + "#class" : naverblog.NaverBlogBlogExtractor, + "#pattern" : naverblog.NaverBlogPostExtractor.pattern, "#range" : "1-12", "#count" : 12, }, { "#url" : "https://blog.naver.com/PostList.nhn?blogId=gukjung", - "#category": ("", "naver", "blog"), - "#class" : naver.NaverBlogExtractor, - "#pattern" : naver.NaverPostExtractor.pattern, + "#class" : naverblog.NaverBlogBlogExtractor, + "#pattern" : naverblog.NaverBlogPostExtractor.pattern, "#range" : "1-12", "#count" : 12, }, { "#url" : "https://blog.naver.com/PostList.naver?blogId=gukjung", - "#category": ("", "naver", "blog"), - "#class" : naver.NaverBlogExtractor, + "#class" : naverblog.NaverBlogBlogExtractor, }, ) diff --git a/test/results/chzzk.py b/test/results/naverchzzk.py similarity index 91% rename from test/results/chzzk.py rename to test/results/naverchzzk.py index 25da3ce2..995f5941 100644 --- a/test/results/chzzk.py +++ b/test/results/naverchzzk.py @@ -4,14 +4,14 @@ # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation. -from gallery_dl.extractor import chzzk +from gallery_dl.extractor import naverchzzk __tests__ = ( { "#url" : "https://chzzk.naver.com/f30b95fc9af53a75b781d7d3dd933892/community/detail/13393754", - "#class" : chzzk.ChzzkCommentExtractor, + "#class" : naverchzzk.NaverChzzkCommentExtractor, "#results": ( "https://nng-phinf.pstatic.net/MjAyNDA3MDlfNDgg/MDAxNzIwNTMzNzg2MDUx.0K9XrEW9CCSd2b7VdQHf8RGWkHAUsqEhNnLlleA11SUg.ZLx2V3gJPZR-kzrMY3E17wbu1ZmzYjitrEKmM_ykeWkg.PNG/tftyt.png", ), @@ -35,7 +35,7 @@ __tests__ = ( { "#url" : "https://chzzk.naver.com/f30b95fc9af53a75b781d7d3dd933892/community/detail/20273040", - "#class" : chzzk.ChzzkCommentExtractor, + "#class" : naverchzzk.NaverChzzkCommentExtractor, "#results": ( "https://nng-phinf.pstatic.net/MjAyNTA2MTNfMTUw/MDAxNzQ5ODI1NjkyMzgx.8bsZ9moAfpuK3dqhHBxdd_CQdSuP5-MRrFgyJGDfdtEg.cs9HcI9BxBVXGUqJQhsUSGyOYvB3vj2itDB-arpvmokg.GIF/%EB%AC%BC%EC%9E%90%EB%AF%B8%EB%84%A4a.gif", "https://nng-phinf.pstatic.net/MjAyNTA2MTNfMTAg/MDAxNzQ5ODI1NzA2NDk4.8PHxVU-4N8UE6mnDoDRhTMYoao9p0niz08DPQEqm2pog.C4KZL_RiK-jGlfKgoXJS5LdO3BDZUuPDCSsaqttE6Jwg.GIF/%EB%AC%BC%EC%9E%90%EB%AF%B8%EB%84%A4ab.gif", @@ -65,14 +65,14 @@ __tests__ = ( { "#url" : "https://chzzk.naver.com/f30b95fc9af53a75b781d7d3dd933892/community", - "#class": chzzk.ChzzkCommunityExtractor, + "#class": naverchzzk.NaverChzzkCommunityExtractor, "#range": "1-50", "#count": 50, }, { "#url" : "https://chzzk.naver.com/f30b95fc9af53a75b781d7d3dd933892/community", - "#class" : chzzk.ChzzkCommunityExtractor, + "#class" : naverchzzk.NaverChzzkCommunityExtractor, "#options": {"offset": 50}, "#range" : "1-50", "#count" : 50, diff --git a/test/results/naverwebtoon.py b/test/results/naverwebtoon.py index 93132c98..c7c97fbe 100644 --- a/test/results/naverwebtoon.py +++ b/test/results/naverwebtoon.py @@ -10,8 +10,7 @@ from gallery_dl.extractor import naverwebtoon __tests__ = ( { "#url" : "https://comic.naver.com/webtoon/detail?titleId=26458&no=1&weekday=tue", - "#category": ("", "naverwebtoon", "episode"), - "#class" : naverwebtoon.NaverwebtoonEpisodeExtractor, + "#class" : naverwebtoon.NaverWebtoonEpisodeExtractor, "#count" : 14, "#sha1_url" : "47a956ba8c7a837213d5985f50c569fcff986f75", "#sha1_content": "3806b6e8befbb1920048de9888dfce6220f69a60", @@ -34,8 +33,7 @@ __tests__ = ( { "#url" : "https://comic.naver.com/challenge/detail?titleId=765124&no=1", - "#category": ("", "naverwebtoon", "episode"), - "#class" : naverwebtoon.NaverwebtoonEpisodeExtractor, + "#class" : naverwebtoon.NaverWebtoonEpisodeExtractor, "#pattern" : r"https://image-comic\.pstatic\.net/user_contents_data/challenge_comic/2021/01/19/342586/upload_7149856273586337846\.jpeg", "#count" : 1, @@ -64,8 +62,7 @@ __tests__ = ( { "#url" : "https://comic.naver.com/bestChallenge/detail?titleId=620732&no=334", "#comment" : "empty tags (#5120)", - "#category": ("", "naverwebtoon", "episode"), - "#class" : naverwebtoon.NaverwebtoonEpisodeExtractor, + "#class" : naverwebtoon.NaverWebtoonEpisodeExtractor, "#count" : 9, "artist" : [], @@ -81,42 +78,37 @@ __tests__ = ( { "#url" : "https://comic.naver.com/bestChallenge/detail.nhn?titleId=771467&no=3", - "#category": ("", "naverwebtoon", "episode"), - "#class" : naverwebtoon.NaverwebtoonEpisodeExtractor, + "#class" : naverwebtoon.NaverWebtoonEpisodeExtractor, "#pattern" : r"https://image-comic\.pstatic\.net/user_contents_data/challenge_comic/2021/04/28/345534/upload_3617293622396203109\.jpeg", "#count" : 1, }, { "#url" : "https://comic.naver.com/webtoon/list?titleId=22073", - "#category": ("", "naverwebtoon", "comic"), - "#class" : naverwebtoon.NaverwebtoonComicExtractor, - "#pattern" : naverwebtoon.NaverwebtoonEpisodeExtractor.pattern, + "#class" : naverwebtoon.NaverWebtoonComicExtractor, + "#pattern" : naverwebtoon.NaverWebtoonEpisodeExtractor.pattern, "#count" : 32, }, { "#url" : "https://comic.naver.com/webtoon/list?titleId=765124", "#comment" : "/webtoon/ path for 'challenge' comic (#5123)", - "#category": ("", "naverwebtoon", "comic"), - "#class" : naverwebtoon.NaverwebtoonComicExtractor, + "#class" : naverwebtoon.NaverWebtoonComicExtractor, "#range" : "1", "#results" : "https://comic.naver.com/challenge/detail?titleId=765124&no=1", }, { "#url" : "https://comic.naver.com/challenge/list?titleId=765124", - "#category": ("", "naverwebtoon", "comic"), - "#class" : naverwebtoon.NaverwebtoonComicExtractor, - "#pattern" : naverwebtoon.NaverwebtoonEpisodeExtractor.pattern, + "#class" : naverwebtoon.NaverWebtoonComicExtractor, + "#pattern" : naverwebtoon.NaverWebtoonEpisodeExtractor.pattern, "#count" : 24, }, { "#url" : "https://comic.naver.com/bestChallenge/list.nhn?titleId=789786", - "#category": ("", "naverwebtoon", "comic"), - "#class" : naverwebtoon.NaverwebtoonComicExtractor, - "#pattern" : naverwebtoon.NaverwebtoonEpisodeExtractor.pattern, + "#class" : naverwebtoon.NaverWebtoonComicExtractor, + "#pattern" : naverwebtoon.NaverWebtoonEpisodeExtractor.pattern, "#count" : 1, },