|
| 1 | +#!/usr/bin/env python3 |
| 2 | +# -*- coding: utf-8 -*- |
| 3 | + |
| 4 | +__author__ = "ipetrash" |
| 5 | + |
| 6 | + |
| 7 | +from urllib.parse import urljoin |
| 8 | + |
| 9 | +# pip install requests==2.32.2 |
| 10 | +import requests |
| 11 | + |
| 12 | +# pip install beautifulsoup4==4.15.0 |
| 13 | +from bs4 import BeautifulSoup |
| 14 | + |
| 15 | +HOST: str = "https://cynicmansion.com" |
| 16 | + |
| 17 | +session = requests.session() |
| 18 | +session.headers.update( |
| 19 | + { |
| 20 | + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0", |
| 21 | + "Accept-Language": "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7", |
| 22 | + } |
| 23 | +) |
| 24 | + |
| 25 | + |
| 26 | +def get_comics_url_by_id(comics_id: str | int) -> str: |
| 27 | + return f"{HOST}/{comics_id}/" |
| 28 | + |
| 29 | + |
| 30 | +def get_comics_info( |
| 31 | + comics_id__or__url: str | int, |
| 32 | +) -> tuple[str, str, str]: # TODO: dataclass |
| 33 | + url_comics: str |
| 34 | + if isinstance(comics_id__or__url, str) and comics_id__or__url.startswith("http"): |
| 35 | + url_comics = comics_id__or__url |
| 36 | + else: |
| 37 | + url_comics = get_comics_url_by_id(comics_id__or__url) |
| 38 | + |
| 39 | + rs = session.get(url_comics) |
| 40 | + rs.raise_for_status() |
| 41 | + |
| 42 | + root = BeautifulSoup(rs.content, "html.parser") |
| 43 | + |
| 44 | + title = root.select_one(".comics_name").text.strip() |
| 45 | + |
| 46 | + url_image = urljoin(rs.url, root.select_one(".comics_image > img")["src"]) |
| 47 | + |
| 48 | + return url_comics, title, url_image |
| 49 | + |
| 50 | + |
| 51 | +def get_last_commics_id() -> int: |
| 52 | + rs = session.get(HOST) |
| 53 | + rs.raise_for_status() |
| 54 | + |
| 55 | + root = BeautifulSoup(rs.content, "html.parser") |
| 56 | + |
| 57 | + # Example: <a href="/2184/">комментарии (1)</a> -> 2184 |
| 58 | + return int( |
| 59 | + root.select_one( |
| 60 | + ".comics_wrap:has(.comics_name) table > tr > td:first-child > a[href]" |
| 61 | + )["href"].replace("/", "") |
| 62 | + ) |
| 63 | + |
| 64 | + |
| 65 | +def get_comics_image_url(comics_id__or__url: str | int) -> str: |
| 66 | + _, _, url_image = get_comics_info(comics_id__or__url) |
| 67 | + return url_image |
| 68 | + |
| 69 | + |
| 70 | +if __name__ == "__main__": |
| 71 | + last_commics_id = get_last_commics_id() |
| 72 | + print("last_commics_id:", last_commics_id) |
| 73 | + |
| 74 | + print() |
| 75 | + comics_id = 1538 |
| 76 | + print(f"About #{comics_id} comics") |
| 77 | + |
| 78 | + url = get_comics_url_by_id(comics_id) |
| 79 | + print(comics_id, url) |
| 80 | + print() |
| 81 | + print(get_comics_info(comics_id)) |
| 82 | + print(get_comics_info(url)) |
| 83 | + print() |
| 84 | + print(get_comics_image_url(comics_id)) |
| 85 | + print(get_comics_image_url(url)) |
0 commit comments