在线浏览“秀人网合集”的新思路:30 行 Python 把封面图链接秒变本地可点图库

在线浏览“秀人网合集”的新思路:30 行 Python 把封面图链接秒变本地可点图库

用 30 行 Python 把秀人网公开合集“搬”进本地数据库

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

“秀人网”近日上线的新主题合集页采用前端渲染,数据通过 /api/v2/theme/list 接口一次性返回 JSON,无需模拟点击“加载更多”。接口无登录限制,但带 5 秒滑动窗口的 IP 频次校验:单 IP >30 次/分即返回 429。本文示范如何遵守 robots 协议、放缓速率,仅采集“公开可见”字段,并给出断点续抓、User-Agent 随机化、异常重试等常用技巧。
核心思路三步走:
分析列表接口:在浏览器 DevTools 里筛选 XHR,发现真实请求 URL 形如
https://www.xiuren.net/api/v2/theme/list?page={page}&size=20,返回体含 data.total 与 data.list。
解析单条记录:字段 title、author、coverUrl 即为我们需要的元数据,无需再进详情页。
限速+重试:用 tenacity 的 @retry(stop=stop_after_attempt(3)) 装饰器,遇到 429 自动退避 10 秒;全局速率 time.sleep(random.uniform(1, 2)),确保平均 <30 次/分。
运行环境:Python≥3.7,依赖如下
pip install requests pandas tenacity fake-useragent
代码(文件 save_xiuren_meta.py):

#!/usr/bin/env python3# -*- coding: utf-8 -*-""" 抓取秀人网公开主题合集元信息,仅采集 title/author/coverUrl 三字段。 仅供学习,请遵守平台 robots.txt 与相关法律法规。 """import csv, time, random, requests from tenacity import retry, stop_after_attempt, wait_fixed from fake_useragent import UserAgent BASE_URL ="https://www.xiuren.net/api/v2/theme/list" CSV_FILE ="xiuren_meta.csv" PAGE_SIZE =20 MAX_PAGE =50# 按需调整,0 表示抓全量 SLEEP_RANGE =(1,2)# 秒,随机休眠 ua = UserAgent() session = requests.Session() session.headers.update({"Referer":"https://www.xiuren.net/"})@retry(stop=stop_after_attempt(3), wait=wait_fixed(10))deffetch_one_page(page:int): session.headers.update({"User-Agent": ua.random}) params ={"page": page,"size": PAGE_SIZE} resp = session.get(BASE_URL, params=params, timeout=10)if resp.status_code ==429:raise Exception("Rate limited") resp.raise_for_status()return resp.json()defmain(): writer =Nonefor p inrange(1, MAX_PAGE +1):print(f"[+] 正在抓取第 {p} 页 …") js = fetch_one_page(p) rows =[{"title": item["title"],"author": item["author"],"coverUrl": item["coverUrl"]}for item in js["data"]["list"]]ifnot writer: writer = csv.DictWriter(open(CSV_FILE,"w", newline="", encoding="utf-8"), fieldnames=["title","author","coverUrl"]) writer.writeheader() writer.writerows(rows)if js["data"]["total"]<= p * PAGE_SIZE:break time.sleep(random.uniform(*SLEEP_RANGE))print(f"[√] 抓取完成,已写入 {CSV_FILE}")if __name__ =="__main__": main()

运行后同级目录生成 xiuren_meta.csv,可导入 Excel 或数据库二次分析。若需增量更新,可把 CSV_FILE 改为 SQLite,并在写入前按 title 做唯一索引去重。
再次提醒:
仅抓取“公开可见”字段,不绕过登录、不破解加密参数;
速率温和,不干扰站点正常服务;
数据勿商用,尊重原作者版权。
祝各位读者调试顺利,也欢迎把改进方案提交到开源社区,共同维护良好的技术交流氛围。

Read more

【Java】synchronized关键字详解:从字节码到对象头与锁升级

【Java】synchronized关键字详解:从字节码到对象头与锁升级

👨‍💻程序员三明治:个人主页 🔥 个人专栏: 《设计模式精解》《重学数据结构》 🤞先做到 再看见! 目录 * synchronized底层原理(总结版) * `synchronized` 底层原理(详解版) * 1. 字节码层面:monitorenter 和 monitorexit * 2. JVM 底层实现:对象头与 Monitor * 2.1 Java 对象头(Mark Word) * 2.2 Monitor(管程/监视器锁) * 3. 锁的升级与优化 * 3.1 偏向锁 * 3.2 轻量级锁 * 3.3 重量级锁 * 4. 硬件层面:内存屏障与 CAS * JVM锁升级是什么?

By Ne0inhk
Java各大厂实习面试题面经新鲜出炉!---壹

Java各大厂实习面试题面经新鲜出炉!---壹

🌟 Hello,我是Java学习通! 🌈 在彩虹般绚烂的技术栈中,我是那个永不停歇的色彩收集者。 🦋 每一个优化都是我培育的花朵,每一个特性都是我放飞的蝴蝶。 🔬 每一次代码审查都是我的显微镜观察,每一次重构都是我的化学实验。 🎵 在编程的交响乐中,我既是指挥家也是演奏者。让我们一起,在技术的音乐厅里,奏响属于程序员的华美乐章。 目录 1.MySQL事务机制(阿里巴巴) 2.有做过SQL优化的实现么(阿里巴巴) 3.Nacos底层是如何实现注册中心功能的:(阿里巴巴) 4.RocketMQ如何持久化(阿里巴巴) 5.介绍一下websocket(阿里巴巴) 6.如何判断是http是长连接还是短连接,怎么设置长连接(阿里巴巴) 7.HashMap的实现原理(快手) 8.HashMap承载的元素越来越少,什么时候会退化成链表,为什么两者设置的这个值不对称(快手) 9.mysql和redis的一致性怎么保证的(快手) 10.数据库有哪些隔离级别 默认的隔离级别是什么(快手) 11.缓存击穿

By Ne0inhk
Java中的TCP协议(如果想知道Java中有关TCP协议的知识,那么只看这一篇就足够了!)(上)

Java中的TCP协议(如果想知道Java中有关TCP协议的知识,那么只看这一篇就足够了!)(上)

前言:TCP协议是网络通信的基础,其提供可靠、面向连接的数据传输,确保数据包按序到达且无丢失,TCP 广泛应用于文件传输、即时通讯和 Web 服务,是我们在学习网络编程的重要基础。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-ZEEKLOG博客 在正式开始讲解之前,先让我们看一下本文大致的讲解内容: 目录 1.TCP 头部组成 1. 源端口号 2. 目的端口号 3. 序列号 4. 确认号 5. 数据偏移 6. 保留位 7. 标志位 8. 窗口大小 9. 校验和 10. 紧急指针 11. 可选字段 12. 数据部分 2.TCP的可靠传输机制         (1)确认应答(ACK)         (2)序列号去重

By Ne0inhk
2025年第十六届蓝桥杯省赛JavaB组真题回顾

2025年第十六届蓝桥杯省赛JavaB组真题回顾

第16届蓝桥杯省赛已经结束了,第一次参加也是坐牢了4个小时,现在还是来总结一下吧(先声明以下的解法,大家可以当作一种思路来看,解法不一定是正解,只是给大家提供一种能够正常想到的思路吧) 试题A:逃离高塔 本题其实没有什么难度,就是一个循环遍历即可,那么唯一需要注意的就是循环遍历的过程中,int是会爆的,这里需要用long来进行存储 public class Main{ public static void main(String[] args){ int ans=0;//记录最终答案 for(long i=1;i<=2025;i++){ long x=i*i*i; if(n%10==3){ ans++; } } System.out.println(ans); } } ​  最后进行的答案就是:

By Ne0inhk