diff --git a/README.md b/README.md index 4047a66..a4a03d0 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,8 @@

📸 程序截图


+

🪟 关于终端

+

⭐ 推荐使用 Windows 终端 (Windows 11 自带默认终端)运行程序以便获得最佳显示效果!

🥣 使用方法

如果仅需下载作品文件,选择 直接运行 或者 源码运行 均可,如果需要获取作品信息,则需要进行二次开发进行调用。

🖱 直接运行

diff --git a/main.py b/main.py index 9fb040e..5fa571f 100644 --- a/main.py +++ b/main.py @@ -44,6 +44,7 @@ def example(): class XHSDownloader(App): + VERSION = 1.5 CSS_PATH = "static/XHS_Downloader.tcss" BINDINGS = [ Binding(key="q", action="quit", description="退出程序"), @@ -63,7 +64,7 @@ class XHSDownloader(App): yield Footer() def on_mount(self) -> None: - self.title = "小红书作品采集工具" + self.title = f"小红书作品采集工具 V{self.VERSION}" def on_button_pressed(self, event: Button.Pressed) -> None: if event.button.id == "solo": diff --git a/source/Image.py b/source/Image.py index 9462401..fcc6e73 100644 --- a/source/Image.py +++ b/source/Image.py @@ -1,13 +1,12 @@ from json import loads from re import compile - -from .Html import Html - __all__ = ['Image'] class Image: IMAGE_INFO = compile(r'("infoList":\[\{.*?}])') + IMAGE_TOKEN = compile( + r"http://sns-webpic-qc.xhscdn.com/\d+/\w+/(\w+)!") def get_image_link(self, html: str) -> list: data = self.__extract_image_data(html) @@ -22,11 +21,18 @@ class Image: return [loads(f"{{{i}}}") for i in data] @staticmethod - def __extract_image_urls(data: list[dict]) -> list[str]: + def __generate_image_link(token: str) -> str: + return f"https://ci.xiaohongshu.com/{token}?imageView2/2/w/format/png" + + def __extract_image_token(self, url: str) -> str: + return self.__generate_image_link(token[0]) if len( + token := self.IMAGE_TOKEN.findall(url)) == 1 else "" + + def __extract_image_urls(self, data: list[dict]) -> list[str]: urls = [] for i in data: for j in i.get("infoList", []): if j.get("imageScene", "").startswith("CRD_WM_"): - urls.append(j.get("url", "")) + urls.append(self.__extract_image_token(j.get("url", ""))) break - return [Html.format_url(i) for i in urls if i] + return [i for i in urls if i] diff --git a/source/__init__.py b/source/__init__.py index 247a193..1ad5e3d 100644 --- a/source/__init__.py +++ b/source/__init__.py @@ -17,13 +17,11 @@ class XHS: headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome" "/116.0.0.0 Safari/537.36", - "Cookie": "abRequestId=8bf8c305-4e5b-52dd-a723-e9a5343ab42d; webBuild=3.11.3; xsecappid=xhs-pc-web" - "; a1=18b5003660f88kld0gicpx2on2oksepl5y3r9htmn50000247235; webId=a2b049d2fa82434385976a4" - "9814085b0; websectiga=16f444b9ff5e3d7e258b5f7674489196303a0b160e16647c6c2b4dcb609f4134; s" - "ec_poison_id=3d97668d-1e50-42a7-89c0-7b46aa0183a5; web_session=030037a2006067cf0a2b5f724b" - "224a1819eb36; gid=yYD288qW4824yYD288qKKvx98iYYT1f8k3SUq6ICJlIJlF28TMdU1j888J4WJq28fqDJiqq" - "0; unread={%22ub%22:%22650533d4000000001302862b%22%2C%22ue%22:%2265015857000000001e021a5e" - "%22%2C%22uc%22:42}", + "Cookie": "abRequestId=c76828f5-4f37-5b3b-8cc3-036eb91b2edb; webBuild=3.14.1; xsecappid=xhs-pc-web; " + "a1=18ba9b2b23co9uwihz4adkebwsw05g8upycgsldyj50000141248; webId=23ee7745020025247828cf8d6d0decff; " + "websectiga=6169c1e84f393779a5f7de7303038f3b47a78e47be716e7bec57ccce17d45f99; " + "sec_poison_id=ae001863-a9db-4463-ad78-ede3aac4e5b1; gid=yYD0jDJDWyU4yYD0jDJDJv1fqSlj7E3xu40fSvVTd" + "DEMEk2882kY7M888y4yJ4Y8D8SK0iiK; web_session=030037a2797dde5008c3e66f32224a8af75429; ", } links = compile(r"https://www.xiaohongshu.com/explore/[0-9a-z]+")