当前位置:首页>python>Python 获取开盘啦明天炒什么

Python 获取开盘啦明天炒什么

  • 2026-09-10 11:28:55
Python 获取开盘啦明天炒什么

Python 获取开盘啦明天炒什么

原创 · Python 实战教程 · 适合小白阅读

今天分享一个非常实用的 Python 接口爬虫案例:通过抓包拿到接口地址和参数,然后用 Python 模拟请求,把“开盘啦明天炒什么”里的新闻标题、时间、热度等内容抓取下来,并整理成我们能直接阅读的数据。

这篇文章尽量不讲复杂理论,只讲三件事:怎么跑通、怎么看结果、怎么改成自己能用的版本。

提醒:本文只用于 Python 学习和个人研究。Token、UserID、DeviceID 属于敏感信息,不要公开发布,也不要高频请求接口。

一、先看运行效果

运行代码后,终端会显示当前正在抓取第几页,然后输出整理后的结果。下面这张图,就是你这边实际运行后的效果截图:

运行后可看到分页抓取状态与解析结果

简单理解:我们不是直接去“看网页”,而是直接向接口发送请求,然后把接口返回的 JSON 数据整理成标题、时间、热度等字段。

二、这段代码到底做了什么?

这段代码的核心逻辑其实很简单,一共就三步:

  1. 还原请求:
    把抓包里看到的 URL、请求头、请求参数,用 Python 写出来。
  2. 获取数据:
    使用 requests.post() 模拟 App 请求接口。
  3. 解析结果:
    把接口返回的原始 JSON,提取成“日期、标题、时间、热度”等简单字段。

三、准备工作

如果你的电脑还没安装 requests,先执行下面这条命令:

pip install requests

然后新建一个 Python 文件,例如:

kpl_tomorrow_topic.py

四、完整简单版代码

下面这份代码适合直接复制使用。

import requestsimport jsonimport timefrom typing import List, Dict, Anyclass LonghuNewsCrawler:    """    龙湖VIP新闻接口爬虫(根据抓包还原)    """    def __init__(        self,        device_id: str,        token: str,        user_id: str,        version: str = "5.23.0.1",        base_url: str = "https://applhb.longhuvip.com/w1/api/index.php"    ):        self.url = base_url        self.headers = {            "Content-Type": "application/x-www-form-urlencoded; charset=utf-8",            "Connection": "keep-alive",            "Accept": "*/*",            "User-Agent": "lhb/5.23.1 (com.kaipanla.www; build:1; iOS 18.7.7) Alamofire/4.9.1",            "Accept-Language": "zh-Hans-CN;q=1.0",            "Accept-Encoding": "gzip;q=1.0, compress;q=0.5",        }        self.base_data = {            "DeviceID": device_id,            "Token": token,            "UserID": user_id,            "VerSion": version,            "PhoneOSNew": "2",            "a": "InfoList",            "apiv": "w44",            "c": "Topic",            "st": "5",        }    def fetch_page(self, index: int = 0) -> Dict[str, Any]:        """        拉取单页数据        """        data = self.base_data.copy()        data["Index"] = str(index)        try:            resp = requests.post(                self.url,                headers=self.headers,                data=data,                timeout=10            )            resp.raise_for_status()            # 自动 JSON 解析            return resp.json()        except Exception as e:            print(f"[ERROR] 请求失败 index={index}: {e}")            return {}    def parse(self, raw: Dict[str, Any]) -> List[Dict[str, Any]]:        """        解析数据结构        """        result = []        if not raw or "List" not in raw:            return result        for day_block in raw["List"]:            day = day_block.get("Day", "")            items = day_block.get("List", [])            for item in items:                result.append({                    "day": day,                    "id": item.get("ID"),                    "title": item.get("Title"),                    "time": item.get("Time"),                    "hot": item.get("HotVal"),                    "tag": item.get("HotTag"),                    "is_vote": item.get("IsVote"),                    "is_new": item.get("New")                })        return result    def fetch_all(self, max_page: int = 10, sleep: float = 0.5) -> List[Dict[str, Any]]:        """        批量抓取多页        """        all_data = []        for i in range(max_page):            print(f"[INFO] 正在抓取 page={i}")            raw = self.fetch_page(i)            data = self.parse(raw)            if not data:                print("[INFO] 无更多数据,停止")                break            all_data.extend(data)            time.sleep(sleep)        return all_dataif __name__ == "__main__":    # ====== 这里换成你抓包里的真实参数 ======    crawler = LonghuNewsCrawler(        device_id="",          user_id=""      )    data = crawler.fetch_all(max_page=5)    print("\n===== 结果 =====")    print(json.dumps(data[:5], ensure_ascii=False, indent=2))

五、怎么使用?

第 1 步:复制代码

把上面的完整代码复制到 kpl_tomorrow_topic.py 文件中。

第 2 步:替换参数

重点把下面这 3 个参数替换成你自己抓包得到的真实值:

"DeviceID": "这里填写你自己的 DeviceID", "Token": "这里填写你自己的 Token", "UserID": "这里填写你自己的 UserID"

第 3 步:运行代码

在终端中执行:

python kpl_tomorrow_topic.py

如果参数没有问题,就会输出分页抓取信息和整理后的 JSON 结果。

六、代码里最关键的几个点

  • 分页抓取:
    通过 Index 参数控制第几页,从 0 开始抓。
  • 时间格式化:
    接口返回的时间通常是时间戳,所以代码里用了 format_time() 转成正常时间。
  • 异常处理:
    如果某一页请求失败,代码会打印错误并停止,避免一直报错。
  • 节奏控制:
    每抓一页后 sleep(0.5),避免请求过快。

七、常见问题

1)为什么返回空数据?

大概率是 Token 过期、参数填错,或者接口字段发生变化。这种情况通常需要重新抓包确认。

2)为什么时间是一串数字?

因为接口很多时候返回的是时间戳,所以代码里才会专门做一次格式转换。

3)为什么要加 sleep?

这是为了避免请求太快。学习测试可以少量请求,但不建议高频采集。

八、后续还能怎么扩展?

当你把这个简单版跑通以后,后面就可以继续升级,比如:

  1. 保存成 Excel;
  2. 按热度排序;
  3. 按关键词筛选;
  4. 自动去重;
  5. 定时抓取;
  6. 自动生成每日题材摘要。

最新文章

随机文章