AI网络爬虫:批量获取post请求动态加载的json数据

网站https://www.futurepedia.io/ai-innovations的数据是通过post请求动态加载的:

查看几页的请求载荷:

{"companies":[],"startDate":"2023-12-01T00:00:00.000Z","endDate":"2024-06-09T12:25:08.525Z","limit":25,"page":9,"categories":[],"itemTypes":[],"query":null}

{"companies":[],"startDate":"2023-12-01T00:00:00.000Z","endDate":"2024-06-09T12:25:08.525Z","limit":25,"page":7,"categories":[],"itemTypes":[],"query":null}

{"companies":[],"startDate":"2023-12-01T00:00:00.000Z","endDate":"2024-06-09T12:25:08.525Z","limit":25,"page":5,"categories":[],"itemTypes":[],"query":null}

这三个请求载荷的主要区别在于它们的"page"参数。这个参数通常用于分页,表示请求的是第几页的数据。具体来说:

  1. 第一个请求载荷请求的是第9页的数据。
  2. 第二个请求载荷请求的是第7页的数据。
  3. 第三个请求载荷请求的是第5页的数据。

其他参数,如"companies"、"startDate"、"endDate"、"limit"、"categories"和"itemTypes",在这三个请求中都是相同的。"startDate"和"endDate"定义了请求数据的时间范围,"limit"定义了每页显示的数据条数,而"categories"和"itemTypes"可能用于过滤数据,但在这里它们都是空的,表示没有应用任何过滤条件。"query"参数也是空的,表示没有使用任何搜索查询。

查看返回的json数据:

{

"products": [

{

"id": "2dd3fed5-fb31-473d-8c13-b731c9617657",

"name": "Copilot for Data Factory",

"company": {

"name": "Microsoft",

"slug": "microsoft"

},

"category": "Automation",

"itemType": "Feature",

"shortDescription": "Automates data ingestion and transformation processes",

"longDescription": "Provides AI-driven guidance for data integration, ensuring up-to-date and accurate warehouse data.",

"releaseDate": "2024-05-23",

"sources": [

"https://blog.fabric.microsoft.com/en-us/blog/announcing-the-public-preview-of-copilot-for-data-warehouse-in-microsoft-fabric?ft=All"

]

},

ChatGPT输入提示词:

你是一个Python编程专家,完成一个Python脚本编写的任务,具体步骤如下:

在F盘新建一个Excel文件:AIInnovations20240609.xlsx

爬取网页:

请求网址:

https://www.futurepedia.io/api/product-releases

请求方法:

POST

状态代码:

200 OK

远程地址:

172.67.176.202:443

引荐来源网址政策:

strict-origin-when-cross-origin

请求载荷:

{"companies":[],"startDate":"2023-12-01T00:00:00.000Z","endDate":"2024-06-09T12:25:08.525Z","limit":25,"page":{pagenumber},"categories":[],"itemTypes":[],"query":null}

{pagenumber}的值是从1开始,以1递增,以160结束;

获取网页的json数据;

提取这个json数据中"products"键的值,这个值也是一个json数据;

提取这个json数据中所有键的名称,写入Excel文件的表头,所有键对应的值,写入Excel文件的数据列;

保存Excel文件;

注意:每一步都输出信息到屏幕;

每爬取1页数据后暂停5-9秒;

需要对 JSON 数据进行预处理,将嵌套的字典和列表转换成适合写入 Excel 的格式,比如将嵌套的字典转换为字符串。

要设置请求标头:

Accept:

*/*

Accept-Encoding:

gzip, deflate, br, zstd

Accept-Language:

zh-CN,zh;q=0.9,en;q=0.8

Content-Length:

156

Content-Type:

text/plain;charset=UTF-8

Origin:

https://www.futurepedia.io

Priority:

u=1, i

Referer:

https://www.futurepedia.io/ai-innovations

Sec-Ch-Ua:

"Google Chrome";v="125", "Chromium";v="125", "Not.A/Brand";v="24"

Sec-Ch-Ua-Mobile:

?0

Sec-Ch-Ua-Platform:

"Windows"

Sec-Fetch-Dest:

empty

Sec-Fetch-Mode:

cors

Sec-Fetch-Site:

same-origin

User-Agent:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36

ChatGPT生成的源代码:

import requests

import openpyxl

import time

import random

import json

# 文件路径和名称

file_path = r"F:\AIInnovations20240609.xlsx"

# 创建一个新的 Excel 工作簿

wb = openpyxl.Workbook()

ws = wb.active

ws.title = "Product Releases"

# 初始页码

page_number = 1

# 请求的 URL 和方法

url = "https://www.futurepedia.io/api/product-releases"

# 请求头

request_headers = {

'Accept': '*/*',

'Accept-Encoding': 'gzip, deflate, br, zstd',

'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',

'Content-Length': '156',

'Content-Type': 'text/plain;charset=UTF-8',

'Origin': 'https://www.futurepedia.io',

'Priority': 'u=1, i',

'Referer': 'https://www.futurepedia.io/ai-innovations',

'Sec-Ch-Ua': '"Google Chrome";v="125", "Chromium";v="125", "Not.A/Brand";v="24"',

'Sec-Ch-Ua-Mobile': '?0',

'Sec-Ch-Ua-Platform': '"Windows"',

'Sec-Fetch-Dest': 'empty',

'Sec-Fetch-Mode': 'cors',

'Sec-Fetch-Site': 'same-origin',

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36'

}

# 表头写入标志

headers_written = False

# 数据处理函数:将嵌套的字典或列表转换为字符串

def clean_data(value):

if isinstance(value, (dict, list)):

return json.dumps(value, ensure_ascii=False) # 确保非 ASCII 字符被正确编码

return value

# 爬取数据

while page_number <= 190:

print(f"正在爬取第 {page_number} 页的数据...")

# 请求载荷

payload = {

"companies": [],

"startDate": "2023-12-01T00:00:00.000Z",

"endDate": "2024-06-09T12:25:08.525Z",

"limit": 25,

"page": page_number,

"categories": [],

"itemTypes": [],

"query": None

}

# 确保 request_headers 是字典类型

if not isinstance(request_headers, dict):

print(f"错误:请求头不是字典类型:{type(request_headers)}")

break

# 调试打印请求头

print(f"请求头:{request_headers}")

# 发送 POST 请求

try:

response = requests.post(url, headers=request_headers, json=payload)

except Exception as e:

print(f"请求失败,错误信息:{e}")

break

# 检查请求是否成功

if response.status_code != 200:

print(f"请求失败,状态码:{response.status_code}")

break

# 获取 JSON 数据

data = response.json()

products = data.get("products", [])

if not headers_written and products:

# 获取 JSON 数据中的键作为表头

excel_headers = list(products[0].keys())

ws.append(excel_headers)

headers_written = True

# 将数据写入 Excel

for product in products:

cleaned_product = [clean_data(product.get(header, "")) for header in excel_headers]

ws.append(cleaned_product)

# 保存 Excel 文件

wb.save(file_path)

print(f"第 {page_number} 页的数据已写入 Excel 文件。")

# 随机暂停 5-9 秒

sleep_time = random.randint(5, 9)

print(f"暂停 {sleep_time} 秒...")

time.sleep(sleep_time)

# 更新页码

page_number += 2

print(f"数据爬取完成,文件已保存至:{file_path}")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/701194.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

wireshark 标记自己想要的数据包

1:点击视图 2:点击视图-着色规则 点击新增一行,双击名称-进行编辑 过滤器规则-编辑自己想要看到的 点击前景-选择凸出显示颜色 点击背景--选择凸出显示颜色 点击确定按钮

提升易用性,OceanBase生态管控产品的“从小到大”

2022年&#xff0c;OceanBase发布4.0版本“小鱼”&#xff0c;并首次公开提出了单机分布式一体化这一理念&#xff0c;旨在适应大小不同规模的工作负载&#xff0c;全面满足用户数据库“从小到大”全生命周期的需求。当时&#xff0c;我们所说的“从小到大”主要聚焦于数据库的…

Linux系统之smem命令的基本使用

Linux系统之smem命令的基本使用 一、smem命令介绍二、smem命令的使用帮助2.1 smem命令的help帮助信息2.2 smem命令的语法解释 三、smem工具安装3.1 安装epel3.2 搜索smem包3.3 安装smem 四、smem命令的基本使用4.1 查看内存概览4.2 查看内存占用百分比4.3 查看系统内存使用情况…

JDKCGLIB实现动态代理

1.代理模式 代理模式是23中设计模式中的一种。简单来说就是我们使用代理对象来替代真实对象,这样就可以实现在不修改原目标对象的前提下&#xff0c;提供额外的功能操作&#xff0c;以达到扩展目标对象的功能。 代理模式的功能主要是扩展目标对象的功能&#xff0c;比如说在目…

35、matlab设置字体、查看工具包版本、窗口默认布局和程序发布

1、matlab设置字体 1&#xff09;找到预设并点击预设 2&#xff09;设置流程&#xff1a;字体——>自定义——>编辑器——>选择字体及格式——>确定 如图序号所示 2、matlab查看工具包版本&#xff1a;ver命令 1&#xff09;命令行窗口输入命令 即可查看工具包…

Halcon 多相机统一坐标系

小杨说事-基于Halcon的多相机坐标系统一原理个人理解_多相机标定统一坐标系-CSDN博客 一、概述 最近在搞多相机标定等的相关问题&#xff0c;对于很大的场景&#xff0c;单个相机的视野是不够的&#xff0c;就必须要统一到一个坐标系下&#xff0c;因此我也用了4个相机&#…

指挥中心操作台在轨道交通中的作用

随着城市化进程的加速和交通需求的日益增长&#xff0c;轨道交通作为高效、便捷、环保的出行方式&#xff0c;在城市交通体系中扮演着越来越重要的角色。而在轨道交通系统的运行中&#xff0c;指挥中心操作台则发挥着至关重要的作用。本文将详细探讨指挥中心操作台在轨道交通中…

龙气万象-大麗和和「腾龙图」翡翠高级珠宝系列

泠泠龙吟,气象万千。大麗和和诚献「腾龙图」翡翠高级珠宝系列,以贯穿上下五千年的龙图腾纹样为主轴,融入现代高级珠宝设计,集雅列珍,见证龙纹嬗变,探讨美学的传承与创新。 这一系列从探讨构思到惊艳呈现历时20个月,龙纹原型跨越从战国早期至明清两代的漫长岁月,设计团队自青铜…

ttkbootstrap的icon图标自定义

前言 在使用ttkbootstrap库时&#xff0c;发现icon参数使用报错&#xff0c;错误代码 root ttk.Window(themename"superhero",size(1400, 700),resizable(True, True),iconphoto"1.png" )结果报错&#xff1a;iconphoto path is bad; using default ima…

STM32存储左右互搏 模拟U盘桥接SPI总线FATS读写FLASH W25QXX

STM32存储左右互搏 模拟U盘桥接SPI总线FATS读写FLASH W25QXX STM32的USB接口可以模拟成为U盘&#xff0c;通过FATS文件系统对连接的存储单元进行U盘方式的读写。 这里介绍STM32CUBEIDE开发平台HAL库模拟U盘桥接SPI总线FATS读写W25Q各型号FLASH的例程。 FLASH是常用的一种非易失…

【八股系列】react里组件通信有几种方式,分别怎样进行通信?

文章目录 1. props传递&#xff08;父向子通信&#xff09;:2. 回调函数作为props&#xff08;子向父通信&#xff09;:3. Context API&#xff1a;4. Redux或MobX等状态管理库&#xff1a;4.1 Redux使用示例 5. refs&#xff1a; 1. props传递&#xff08;父向子通信&#xff…

netty内存马探究

0x01 前言 基于netty动态创建pipeline的特性&#xff0c;其内存马的构造思路与tomcat有一定的区别&#xff0c;目前网上有关netty内存马的文章都围绕CVE-2022-22947和XXL-JOB两种场景展开&#xff0c;并未对其做更为详细的分析。本文就以上述两种场景为始&#xff0c;尝试从源码…

打造智能饲料工厂:全自动生产线设备

全自动饲料生产线设备实现了从原料投放到成品包装的全程自动化操作。通过传感器和控制系统&#xff0c;设备能够精确控制原料的配比和混合均匀度&#xff0c;确保饲料的质量稳定可靠。同时&#xff0c;自动化生产线还具备智能调节功能&#xff0c;能够根据生产需求自动调节生产…

四季变换,制氮机使用注意事项

随着四季的轮回变换&#xff0c;大自然展现着不同的风貌。对于制氮机而言&#xff0c;季节的变换同样会带来不同的使用挑战和注意事项。本文将为您揭示四季变换对制氮机使用的影响&#xff0c;帮助您更好地掌握制氮机的季节使用须知。 春季 温湿度变化&#xff1a;春季温湿度逐…

Shell脚本从入门到实战

一、概述 shell 是一个命令行解释器&#xff0c;它接受应用程序、用户命令&#xff0c;然后调用操作系统内核。 shell 还是一个功能强大编程语言&#xff0c;易调试&#xff0c;易编写&#xff0c;灵活性强。 二、mac 怎么重启docker 1.如何重启 Docker on Mac 在 macOS 上…

Flutter笔记:关于WebView插件的用法(上)

Flutter笔记 关于WebView插件的用法&#xff08;上&#xff09; - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:htt…

SpringMVC:拦截器(Interceptor)

1. 简介 拦截器&#xff08;Interceptor&#xff09;类似于过滤器&#xff08;Filter&#xff09; Spring MVC的拦截器作用是在请求到达控制器之前或之后进行拦截&#xff0c;可以对请求和响应进行一些特定的处理。拦截器可以用于很多场景下&#xff1a; 1. 登录验证&#xf…

Qt Creator 输入中文

安装fcitx-libs-qt或fcitx-libs-qt5 查看系统自带libfcitxplatforminputcontextplugin.so位置 dpkg -L fcitx-frontend-qt5 | grep .so文件位于 /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so将上述文件拷贝至Qt安装…

燕之屋被授予“国家食品企业质量安全检测技术示范中心(无锡)分中心”牌匾

5月27日&#xff0c;江苏教育界与产业界对话对接系列活动——新型食品与大健康产业协同创新发展大会在江南大学召开。会上&#xff0c;燕之屋荣获“国家食品企业质量安全检测技术示范中心&#xff08;无锡&#xff09;分中心”授牌&#xff0c;燕之屋副总经理、研发技术总监范群…

Linux内网数据代理与数据映射实验

背景介绍 有两台主机&#xff0c;其中一台可以联网&#xff0c;而另一台只能与联网主机&#xff0c;尝试通过配置&#xff0c;使该主机也能正常上网&#xff0c;这常应用于企业内部不联网的服务器&#xff0c;需要安全可靠或临时上网的场景&#xff0c;借助另一台可以上网的内…