[pornpics] add 'category' and 'listing' extractors (#8662)
* [pornpics] add category and listing extractors Add support for: - Category pages like /ass/, /milf/, /blonde/ etc. - Listing pages like /popular/, /recent/, /rating/, /likes/, /views/, /comments/ Category pages use JSON pagination like tags/search. Listing pages don't support JSON pagination and use different HTML structure. * [pornpics] simplify category pattern via class ordering - Move PornpicsCategoryExtractor after PornpicsListingExtractor so it acts as catch-all, eliminating need for negative lookahead - Use list comprehension in PornpicsListingExtractor.galleries() * update docs/supportedsites
This commit is contained in:
@@ -116,3 +116,35 @@ class PornpicsSearchExtractor(PornpicsExtractor):
|
||||
"offset": 0,
|
||||
}
|
||||
return self._pagination(url, params)
|
||||
|
||||
|
||||
class PornpicsListingExtractor(PornpicsExtractor):
|
||||
"""Extractor for galleries from pornpics listing pages
|
||||
|
||||
These pages (popular, recent, etc.) don't support JSON pagination
|
||||
and use single quotes in HTML, unlike category pages.
|
||||
"""
|
||||
subcategory = "listing"
|
||||
pattern = (rf"{BASE_PATTERN}"
|
||||
rf"/(popular|recent|rating|likes|views|comments)/?$")
|
||||
example = "https://www.pornpics.com/popular/"
|
||||
|
||||
def galleries(self):
|
||||
url = f"{self.root}/{self.groups[0]}/"
|
||||
page = self.request(url).text
|
||||
return [
|
||||
{"g_url": href}
|
||||
for href in text.extract_iter(
|
||||
page, "class='rel-link' href='", "'")
|
||||
]
|
||||
|
||||
|
||||
class PornpicsCategoryExtractor(PornpicsExtractor):
|
||||
"""Extractor for galleries from pornpics categories"""
|
||||
subcategory = "category"
|
||||
pattern = rf"{BASE_PATTERN}/([^/?#]+)/?$"
|
||||
example = "https://www.pornpics.com/ass/"
|
||||
|
||||
def galleries(self):
|
||||
url = f"{self.root}/{self.groups[0]}/"
|
||||
return self._pagination(url)
|
||||
|
||||
Reference in New Issue
Block a user