更新项目代码

This commit is contained in:
JoeamAmier 2023-12-03 10:32:51 +08:00
parent cc72e54302
commit ceb3757085
5 changed files with 59 additions and 37 deletions

View File

@ -8,7 +8,7 @@
<img alt="GitHub release (with filter)" src="https://img.shields.io/github/v/release/JoeanAmier/XHS-Downloader?style=for-the-badge&color=44bd32">
<hr>
</div>
<h1>📝 功能清单</h1>
<h1>📑 功能清单</h1>
<ul>
<li>✅ 采集小红书图文/视频作品信息</li>
<li>✅ 获取小红书图文/视频作品下载地址</li>
@ -20,6 +20,13 @@
<h1>📸 程序截图</h1>
<br>
<img src="static/程序运行截图.png" alt="">
<h1>🔗 支持链接</h1>
<ul>
<li>https://www.xiaohongshu.com/explore/作品ID</li>
<li>https://www.xiaohongshu.com/discovery/item/作品ID</li>
<li>https://xhslink.com/分享码</li>
<p>可以单次输入多个作品链接,链接之间使用空格分隔。</p>
</ul>
<h1>🪟 关于终端</h1>
<p>⭐ 推荐使用 <a href="https://learn.microsoft.com/zh-cn/windows/terminal/install">Windows 终端</a> Windows 11 自带默认终端)运行程序以便获得最佳显示效果!</p>
<h1>🥣 使用方法</h1>
@ -47,22 +54,22 @@ folder = "Download" # 作品下载文件夹名称(自动创建),默认值
proxies = None # 网络代理
timeout = 5 # 网络请求超时限制默认值10
chunk = 1024 * 1024 # 下载文件时,每次从服务器获取的数据块大小,单位字节
xhs = XHS(
path=path,
folder=folder,
proxies=proxies,
timeout=timeout,
chunk=chunk, ) # 使用自定义参数
# xhs = XHS() # 使用默认参数
download = True # 是否下载作品文件默认值False
# 返回作品详细信息,包括下载地址
print(xhs.extract(error_demo)) # 获取数据失败时返回空字典
print(xhs.extract(image_demo, download=download))
print(xhs.extract(video_demo, download=download))
print(xhs.extract(multiple_demo, download=download))
# with XHS() as xhs:
# pass # 使用默认参数
with XHS(path=path,
folder=folder,
proxies=proxies,
timeout=timeout,
chunk=chunk) as xhs: # 使用自定义参数
download = True # 是否下载作品文件默认值False
# 返回作品详细信息,包括下载地址
print(xhs.extract(error_demo)) # 获取数据失败时返回空字典
print(xhs.extract(image_demo, download=download))
print(xhs.extract(video_demo, download=download))
print(xhs.extract(multiple_demo, download=download))
</pre>
<h1>⚙️ 配置文件</h1>
<p>项目根目录下的 <code>settings.json</code> 文件,可以自定义部分运行参数。</p>
<p>项目根目录下的 <code>settings.json</code> 文件,首次运行自动生成,可以自定义部分运行参数。</p>
<table>
<thead>
<tr>
@ -133,6 +140,7 @@ print(xhs.extract(multiple_demo, download=download))
<p>
<b>如果您通过 Email 联系我,我可能无法及时查看并回复信息,我会尽力在七天内回复您的邮件;如果有紧急事项或需要更快的回复,请通过其他方式与我联系,谢谢理解!</b>
</p>
<p><b>如果您对抖音 / TikTok 感兴趣,可以了解一下我的另一个开源项目 <a href="https://github.com/JoeanAmier/TikTokDownloader">TikTokDownloader</a></b></p>
<h1>⚠️ 免责声明</h1>
<ul>
<li>使用者对本项目的使用由使用者自行决定,并自行承担风险。作者对使用者使用本项目所产生的任何损失、责任、或风险概不负责。</li>

34
main.py
View File

@ -7,30 +7,26 @@ def example():
error_demo = "https://github.com/JoeanAmier/XHS_Downloader"
image_demo = "https://www.xiaohongshu.com/explore/63b275a30000000019020185"
video_demo = "https://www.xiaohongshu.com/explore/64edb460000000001f03cadc"
multiple_demo = (
"https://www.xiaohongshu.com/explore/63b275a30000000019020185 "
"https://www.xiaohongshu.com/explore/64edb460000000001f03cadc")
multiple_demo = f"{image_demo} {video_demo}"
# 实例对象
path = "" # 作品下载储存根路径,默认值:当前路径
path = "D:\\" # 作品下载储存根路径,默认值:当前路径
folder = "Download" # 作品下载文件夹名称自动创建默认值Download
cookie = "" # 小红书网页版 Cookie
proxies = None # 网络代理
timeout = 5 # 网络请求超时限制默认值10
chunk = 1024 * 1024 # 下载文件时,每次从服务器获取的数据块大小,单位字节
xhs = XHS(
path=path,
folder=folder,
cookie=cookie,
proxies=proxies,
timeout=timeout,
chunk=chunk, ) # 使用自定义参数
# xhs = XHS() # 使用默认参数
download = False # 是否下载作品文件
# 返回作品详细信息,包括下载地址
print(xhs.extract(error_demo)) # 获取数据失败时返回空字典
print(xhs.extract(image_demo, download=download))
print(xhs.extract(video_demo, download=download))
print(xhs.extract(multiple_demo, download=download))
# with XHS() as xhs:
# pass # 使用默认参数
with XHS(path=path,
folder=folder,
proxies=proxies,
timeout=timeout,
chunk=chunk) as xhs: # 使用自定义参数
download = True # 是否下载作品文件默认值False
# 返回作品详细信息,包括下载地址
print(xhs.extract(error_demo)) # 获取数据失败时返回空字典
print(xhs.extract(image_demo, download=download))
print(xhs.extract(video_demo, download=download))
print(xhs.extract(multiple_demo, download=download))
if __name__ == '__main__':

View File

@ -1,5 +1,6 @@
from pathlib import Path
from shutil import move
from shutil import rmtree
__all__ = ['Manager']
@ -24,3 +25,6 @@ class Manager:
@staticmethod
def move(temp: Path, path: Path):
move(temp.resolve(), path.resolve())
def clean(self):
rmtree(self.temp.resolve())

View File

@ -1,11 +1,13 @@
from re import compile
from .Html import Html
__all__ = ['Video']
class Video:
VIDEO_TOKEN = compile(r'"originVideoKey":"pre_post\\u002F(\S+?)"')
VIDEO_TOKEN = compile(r'"originVideoKey":"(\S+?\\u002F\S+?)"')
def get_video_link(self, html: str) -> list:
return [f"https://sns-video-hw.xhscdn.com/pre_post/{
t.group(1)}"] if (t := self.VIDEO_TOKEN.search(html)) else []
return [Html.format_url(f"https://sns-video-hw.xhscdn.com/{
t.group(1)}")] if (t := self.VIDEO_TOKEN.search(html)) else []

View File

@ -100,6 +100,12 @@ class XHS:
"""下载文件默认使用作品 ID 作为文件名,可修改此方法自定义文件名格式"""
return data["作品ID"]
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, traceback):
self.manager.clean()
class XHSDownloader(App):
VERSION = 1.6
@ -114,6 +120,12 @@ class XHSDownloader(App):
# APP = XHS(**Settings().run())
# def __enter__(self):
# return self
# def __exit__(self, exc_type, exc_value, traceback):
# self.manager.clean()
def compose(self) -> ComposeResult:
yield Header()
yield ScrollableContainer(Label("请输入小红书图文/视频作品链接(多个链接使用空格分隔):"),