1
- from bs4 import BeautifulSoup
1
+ import validators
2
+ from bs4 import BeautifulSoup , element
2
3
3
4
from nlightreader .consts .urls import URL_NHENTAI
4
5
from nlightreader .models import Chapter , Image , Manga
@@ -13,7 +14,6 @@ class NHentai(AbstractHentaiMangaCatalog):
13
14
def __init__ (self ):
14
15
super ().__init__ ()
15
16
self .url = URL_NHENTAI
16
- self .url_api = URL_NHENTAI_API
17
17
18
18
def search_manga (self , form ):
19
19
url = f"{ self .url } /search"
@@ -35,19 +35,26 @@ def search_manga(self, form):
35
35
caption_tag = i .find ("div" , class_ = "caption" )
36
36
if caption_tag is not None :
37
37
name = i .find ("div" , class_ = "caption" ).text
38
- cover_tag = i .find ("a" , {"class" : "cover" })
38
+ cover_tag : element . Tag = i .find ("a" , {"class" : "cover" })
39
39
if cover_tag is not None :
40
40
manga_id = cover_tag ["href" ].split ("/" )[- 2 ]
41
41
if not manga_id :
42
42
continue
43
- mangas .append (
44
- Manga (
45
- manga_id ,
46
- self .CATALOG_ID ,
47
- name ,
48
- "" ,
49
- ),
43
+
44
+ manga = Manga (
45
+ manga_id ,
46
+ self .CATALOG_ID ,
47
+ name ,
48
+ "" ,
50
49
)
50
+
51
+ if (noscript_img_tag := cover_tag .find ("noscript" )) and (
52
+ img_tag := noscript_img_tag .find ("img" )
53
+ ):
54
+ src = img_tag .get ("src" )
55
+ if validators .url (src ):
56
+ manga .preview_url = src
57
+ mangas .append (manga )
51
58
return mangas
52
59
53
60
def get_chapters (self , manga : Manga ):
@@ -71,14 +78,8 @@ def get_images(self, manga: Manga, chapter: Chapter):
71
78
for i in html_items :
72
79
img_tag = i .find ("img" , class_ = "" )
73
80
img_url : str = img_tag ["src" ]
74
- for img_format in ["png" , "jpg" , "gif" ]:
75
- if img_url .endswith (f"t.{ img_format } " ):
76
- img_url = img_url .replace (
77
- f"t.{ img_format } " ,
78
- f".{ img_format } " ,
79
- 1 ,
80
- )
81
- break
81
+ if not validators .url (img_url ):
82
+ continue
82
83
images .append (Image ("" , html_items .index (i ) + 1 , img_url ))
83
84
return images
84
85
@@ -93,24 +94,11 @@ def get_image(self, image: Image):
93
94
)
94
95
95
96
def get_preview (self , manga : Manga ):
96
- url = f"{ self .url } /g/{ manga .content_id } "
97
- response = get_html (
98
- url ,
97
+ return get_html (
98
+ manga .preview_url ,
99
99
headers = self .headers ,
100
- content_type = "text " ,
100
+ content_type = "content " ,
101
101
)
102
- if response :
103
- soup = BeautifulSoup (response , "html.parser" )
104
- if html_item := soup .find ("div" , id = "cover" ):
105
- if img_tag := html_item .find ("img" ):
106
- img_request_headers = self .headers | {
107
- "Referer" : URL_NHENTAI ,
108
- }
109
- return get_html (
110
- img_tag ["src" ],
111
- content_type = "content" ,
112
- headers = img_request_headers ,
113
- )
114
102
115
103
def get_manga_url (self , manga : Manga ) -> str :
116
104
return f"{ self .url } /g/{ manga .content_id } "
0 commit comments