11# -*- coding: utf-8 -*-
22
3- # Copyright 2025 Mike Fährmann
4- #
53# This program is free software; you can redistribute it and/or modify
64# it under the terms of the GNU General Public License version 2 as
75# published by the Free Software Foundation.
119from .common import ChapterExtractor , MangaExtractor
1210from .. import text
1311
14- BASE_PATTERN = r"(?:https?://)?(?:ww\d \.)?mangafreak\.me"
12+ BASE_PATTERN = r"(?:https?://)?(?:ww[\dw] \.)?mangafreak\.me"
1513
1614
1715class MangafreakBase ():
@@ -22,33 +20,30 @@ class MangafreakBase():
2220
2321class MangafreakChapterExtractor (MangafreakBase , ChapterExtractor ):
2422 """Extractor for mangafreak manga chapters"""
25- pattern = BASE_PATTERN + r"(/Read1_(. +)_(\d+[a-z]?))"
23+ pattern = BASE_PATTERN + r"(/Read1_([^/?#] +)_(( \d+)( [a-z]) ?))"
2624 example = "https://ww2.mangafreak.me/Read1_Onepunch_Man_1"
2725
2826 def metadata (self , page ):
29- extr = text .extract_from (page )
30- manga = text .unescape (extr ("<title>" , " Chapter " ))
31- title = text .unescape (extr ("" , " - MangaFreak" ))
32-
33- chapter_str = self .groups [2 ]
34- chapter , sep , minor = chapter_str .partition ("e" )
27+ manga = text .extr (page , "<title>Read " , " Chapter " )
28+ title = text .extr (page , 'selected="selected">' , "<" ).partition (": " )[2 ]
29+ _ , manga_slug , chapter_string , chapter , minor = self .groups
3530
3631 return {
37- "manga" : manga ,
38- "title" : title ,
32+ "manga" : text .unescape (manga ),
33+ "manga_slug" : manga_slug ,
34+ "title" : text .unescape (title ) if title else "" ,
3935 "chapter" : text .parse_int (chapter ),
40- "chapter_minor" : sep + minor ,
41- "chapter_string" : chapter_str ,
42- "manga_slug" : self .groups [1 ],
36+ "chapter_minor" : "" if minor is None else minor ,
37+ "chapter_string" : chapter_string ,
4338 "lang" : "en" ,
4439 "language" : "English" ,
4540 }
4641
4742 def images (self , page ):
43+ base = "https://images.mangafreak.me/mangas/"
4844 return [
49- ("https://images.mangafreak.me/mangas/" + path , None )
50- for path in text .extract_iter (
51- page , 'src="https://images.mangafreak.me/mangas/' , '"' )
45+ (base + path , None )
46+ for path in text .extract_iter (page , 'src="' + base , '"' )
5247 ]
5348
5449
@@ -59,34 +54,32 @@ class MangafreakMangaExtractor(MangafreakBase, MangaExtractor):
5954 example = "https://ww2.mangafreak.me/Manga/Onepunch_Man"
6055
6156 def chapters (self , page ):
62- extr = text .extract_from (page )
63- manga = text .unescape (extr ("<title>" , " Manga" ))
64-
65- chapter_table = text .extr (page , "<table>" , "</table>" )
66- if not chapter_table :
67- return []
57+ table = text .extr (page , "<table>" , "</table>" )
58+ if not table :
59+ return ()
6860
6961 data = {
70- "manga" : manga ,
62+ "manga" : text . unescape ( text . extr ( page , "<title>" , " Manga" )) ,
7163 "manga_slug" : self .groups [1 ],
7264 "lang" : "en" ,
7365 "language" : "English" ,
7466 }
7567
7668 results = []
77- for row in text .extract_iter (chapter_table , "<tr>" , "</tr>" ):
69+ chapter_match = text .re (r"(\d+)(\w*)" ).match
70+ for row in text .extract_iter (table , "<tr>" , "</tr>" ):
7871 href = text .extr (row , '<a href="' , '"' )
7972 if not href :
8073 continue
8174 url = self .root + href
82- chapter_str = url .rpartition ("_" )[2 ]
83- chapter , sep , minor = chapter_str . partition ( "e" )
84-
75+ chapter_string = href .rpartition ("_" )[2 ]
76+ chapter , minor = chapter_match ( chapter_string ). groups ( )
77+ title = text . extr ( row , '">' , '<' ). partition ( " - " )[ 2 ]
8578 results .append ((url , {
86- "chapter" : text .parse_int (chapter ),
87- "chapter_minor" : sep + minor ,
88- "chapter_string" : chapter_str ,
79+ "chapter" : text .parse_int (chapter ),
80+ "chapter_minor" : minor ,
81+ "chapter_string" : chapter_string ,
82+ "title" : text .unescape (title ) if title else "" ,
8983 ** data ,
9084 }))
91-
9285 return results
0 commit comments