From 2a52c15fb392defad3badf684325fe5615d58705 Mon Sep 17 00:00:00 2001 From: Junwen Date: Wed, 8 Apr 2026 23:12:53 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=B5=B7=E5=A4=96?= =?UTF-8?q?=E7=89=88=E5=B0=8F=E7=BA=A2=E4=B9=A6(rednote.com)=E6=94=AF?= =?UTF-8?q?=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/base_config.py | 5 +++++ media_platform/xhs/client.py | 10 +++++++--- media_platform/xhs/core.py | 6 +++--- media_platform/xhs/login.py | 2 +- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/config/base_config.py b/config/base_config.py index 17f908c..a87413e 100644 --- a/config/base_config.py +++ b/config/base_config.py @@ -19,6 +19,11 @@ # Basic configuration PLATFORM = "xhs" # Platform, xhs | dy | ks | bili | wb | tieba | zhihu + +# 是否使用海外版小红书 (rednote.com) +# 开启后 API 走 webapi.rednote.com,cookie 域使用 .rednote.com +XHS_INTERNATIONAL = False + KEYWORDS = "编程副业,编程兼职" # Keyword search configuration, separated by English commas LOGIN_TYPE = "qrcode" # qrcode or phone or cookie COOKIES = "" diff --git a/media_platform/xhs/client.py b/media_platform/xhs/client.py index a87a45f..0630e28 100644 --- a/media_platform/xhs/client.py +++ b/media_platform/xhs/client.py @@ -57,8 +57,12 @@ class XiaoHongShuClient(AbstractApiClient, ProxyRefreshMixin): self.proxy = proxy self.timeout = timeout self.headers = headers - self._host = "https://edith.xiaohongshu.com" - self._domain = "https://www.xiaohongshu.com" + if config.XHS_INTERNATIONAL: + self._host = "https://webapi.rednote.com" + self._domain = "https://www.rednote.com" + else: + self._host = "https://edith.xiaohongshu.com" + self._domain = "https://www.xiaohongshu.com" self.IP_ERROR_STR = "Network connection error, please check network settings or restart" self.IP_ERROR_CODE = 300012 self.NOTE_NOT_FOUND_CODE = -510000 @@ -681,7 +685,7 @@ class XiaoHongShuClient(AbstractApiClient, ProxyRefreshMixin): """ url = ( - "https://www.xiaohongshu.com/explore/" + f"{self._domain}/explore/" + note_id + f"?xsec_token={xsec_token}&xsec_source={xsec_source}" ) diff --git a/media_platform/xhs/core.py b/media_platform/xhs/core.py index f797e79..d536521 100644 --- a/media_platform/xhs/core.py +++ b/media_platform/xhs/core.py @@ -55,7 +55,7 @@ class XiaoHongShuCrawler(AbstractCrawler): cdp_manager: Optional[CDPBrowserManager] def __init__(self) -> None: - self.index_url = "https://www.xiaohongshu.com" + self.index_url = "https://www.rednote.com" if config.XHS_INTERNATIONAL else "https://www.xiaohongshu.com" # self.user_agent = utils.get_user_agent() self.user_agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36" self.cdp_manager = None @@ -364,10 +364,10 @@ class XiaoHongShuCrawler(AbstractCrawler): "accept-language": "zh-CN,zh;q=0.9", "cache-control": "no-cache", "content-type": "application/json;charset=UTF-8", - "origin": "https://www.xiaohongshu.com", + "origin": self.index_url, "pragma": "no-cache", "priority": "u=1, i", - "referer": "https://www.xiaohongshu.com/", + "referer": f"{self.index_url}/", "sec-ch-ua": '"Chromium";v="136", "Google Chrome";v="136", "Not.A/Brand";v="99"', "sec-ch-ua-mobile": "?0", "sec-ch-ua-platform": '"Windows"', diff --git a/media_platform/xhs/login.py b/media_platform/xhs/login.py index fe99661..e382954 100644 --- a/media_platform/xhs/login.py +++ b/media_platform/xhs/login.py @@ -219,6 +219,6 @@ class XiaoHongShuLogin(AbstractLogin): await self.browser_context.add_cookies([{ 'name': key, 'value': value, - 'domain': ".xiaohongshu.com", + 'domain': ".rednote.com" if config.XHS_INTERNATIONAL else ".xiaohongshu.com", 'path': "/" }])