当前位置: 首页 > news >正文

python爬虫(三) ---- 分页抓取数据

python爬虫之分页抓取数据

  • 一、环境准备
  • 二、爬取思路
  • 三、代码示例
  • 四、结果展示

一、环境准备

  • 练习地址: https://spa1.scrape.center
  • requests:发出请求
  • pandas:保存数据到 csv文件
  • 依赖安装命令:
    pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
    pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple	
    

二、爬取思路

  • 分析api中返回的分页参数, 获取api中返回的数据总条数, 如下图
    在这里插入图片描述
  • 总页数为 总条数(count) / 每页条数(limit), 通过math函数取上界
  • 计算request需要的分页参数 limit 和 offset, 请求时传入
  • 循环抓取直至最后一页, 数据量过多, 可以进行分批写入
  • 通过装饰器模式 计算程序总执行时间

三、代码示例

import requests
import pandas as pd
import math
import time
import osdef request(url, params):print(f'url: {url}, params: {params}')r = requests.get(url, params=params);return r.json();def parseJson(json_data):movie_list = []results = json_data['results']for result in results:movie_info = {'name': f"{result['name']} - {result['alias']}",'categories': ','.join(result['categories']),'location': ','.join(result['regions']),'duration': result['minute'],'release_date': result['published_at'],'score': result['score']}movie_list.append(movie_info)return movie_listdef save(data):df = pd.DataFrame(data);# 设置表头df.columns = ['电影名', '类型', '地域', '时长', '上映时间', '评分'];df.to_csv(file_path, index=False, encoding='utf-8-sig', mode='a', header=not os.path.exists(file_path));print(f'写入文件成功...{len(data)}条')# 计算耗费时间
def cost_time(func):def fun(*args, **kwargs):t = time.perf_counter()result = func(*args, **kwargs)print(f'func {func.__name__} cost time:{time.perf_counter() - t:.8f} s')return resultreturn funmovie_list = []
file_path = 'data_js.csv'@cost_time
def js_spider():index = 1;limit = 10;total_page = 1;url = 'https://spa1.scrape.center/api/movie';while (True):offset = (index - 1) * limit;params = {'limit': limit,'offset': offset}# 发出请求jsonData = request(url, params)# 解析jsonmovie_list_page = parseJson(jsonData)movie_list.extend(movie_list_page)# 分批写入文件if len(movie_list) >= 50:save(movie_list)movie_list.clear()# 获取总页数, 网址最后一页数据有问题, 所以取下界if index == 1:total_page = math.floor(jsonData['count'] / limit);elif index == total_page:breakindex += 1time.sleep(0.2)# 存储剩余的数据if len(movie_list) > 0:save(movie_list)if __name__ == '__main__':js_spider()

四、结果展示

在这里插入图片描述
在这里插入图片描述

http://www.dtcms.com/a/449177.html

相关文章:

  • 探索大语言模型(LLM):大模型微调方式全解析
  • 【学习笔记03】C++STL标准模板库核心技术详解
  • 做网站有什么关于财务的问题网络设计工作
  • P9751 [CSP-J 2023] 旅游巴士
  • 宠物用品网站开发背景网站推广设计
  • MySql复习及面试题学习
  • .NET周刊【9月第2期 2025-09-14】
  • 秦皇岛企业网站建设wordpress 悬浮音乐
  • 日语学习-日语知识点小记-进阶-JLPT-N1阶段应用练习(6):语法 +考え方19+2022年7月N1
  • 【Linux指南】gdb进阶技巧:断点高级玩法与变量跟踪实战
  • 跨平台游戏引擎 Axmol-2.9.0 发布
  • 金融 - neo4j、Graph Data Science 安装
  • c 可以做网站吗梧州seo排名
  • LuaC API知识点汇总
  • mysql学习--DCL
  • 开源 C++ QT QML 开发(七)自定义控件--仪表盘
  • 论坛开源网站源码网站建设实验总结报告
  • Ansible实战:VMware下K8s自动化部署指南
  • Ansible(三)—— 使用Ansible自动化部署LNMP环境实战指南
  • 【深度学习新浪潮】有没有可能设计出一种统一架构,可以同时处理图像理解的各种下游任务?
  • 介绍一下什么是RabbitMQ的发送者可靠性?
  • 网站后台管理页面模板北京企业建网站定制价格
  • AI编辑器(二) ---调用模型的fim功能
  • UniApp 自定义导航栏适配指南:微信小程序胶囊遮挡、H5 与 App 全端通用方案
  • 数据结构其一 线性表
  • 2025年--Lc164--H14.最长公共前缀(数组和字符串)--Java版
  • 网站html有了怎么建设网站钉钉小程序开发
  • Linux基本指令(2)
  • 从工具到中枢:2025 年 AI 重构实体经济的实践图景
  • 虚幻基础:攻击 与 受击 之间的联动