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

python爬虫-事件触发机制

今天想爬取一些政策,从政策服务 (smejs.cn) 这个网址爬取,html源码找不到链接地址,通过浏览器的开发者工具,点击以下红框

分析预览可知想要的链接地址的id有了,进行地址拼接就行

点击标头可以看到请求后端服务器的api地址,通过拿到这个地址,编写python脚本,不会的可以让gpt帮你写,很好用

import requests
import pandas as pd
import logging
import time
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry# 设置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')# 请求头信息
headers = {'Content-Type': 'application/json','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}# 基础URL
base_url = 'https://policy-gateway.smejs.cn/policy/api/policy/getNewPolicyList'
base_policy_url = 'https://policy.smejs.cn/frontend/policy-service/'# 参数
params = {'orderBy': '','keyWords': '','genreCode': 'K,A,S,Z','queryPublishBegin': '','queryPublishEnd': '','queryApplyBegin': '','queryApplyEnd': '','typeCondition': '','publishUnit': '','applyObj': '','meetEnterprise': '','title': '','commissionOfficeIds': '','commissionOfficeSearchIds': '','industry': '','relativePlatform': '','level': '','isSearch': 'N','policyType': '','provinceValue': '江苏省','cityValue': '','regionValue': '','current': 1,'size': 15,'total': 23960,'page': 0
}# 总条目数和每页条目数
total_policies = 23960
page_size = 15
total_pages = (total_policies // page_size) + 1# 存储所有政策数据
all_policies = []# 配置重试策略
retry_strategy = Retry(total=5,status_forcelist=[429, 500, 502, 503, 504],allowed_methods=["HEAD", "GET", "OPTIONS"]
)
adapter = HTTPAdapter(max_retries=retry_strategy)
http = requests.Session()
http.mount("https://", adapter)
http.mount("http://", adapter)# 遍历每一页
for page in range(total_pages):params['current'] = page + 1try:response = http.get(base_url, headers=headers, params=params, verify=False)response.raise_for_status()except requests.exceptions.RequestException as e:logging.error(f"Failed to fetch data for page {page + 1}: {e}")continuedata = response.json()if 'records' not in data['data']:logging.error(f"No records found for page {page + 1}")continuerecords = data['data']['records']for record in records:policy_id = record.get('id')level_value = record.get('levelValue')title = record.get('title')type_value = record.get('typeValue')commission_office_names = record.get('commissionOfficeNames')publish_time = record.get('publishTime')valid_date_end = record.get('validDateEnd')policy_url = base_policy_url + policy_idall_policies.append({'ID': policy_id,'URL': policy_url,'Level Value': level_value,'Title': title,'Type Value': type_value,'Commission Office Names': commission_office_names,'Publish Time': publish_time,'Valid Date End': valid_date_end})logging.info(f"Fetched data for page {page + 1}")time.sleep(1)  # 防止过快请求# 转换为DataFrame
df = pd.DataFrame(all_policies)# 保存到Excel
df.to_excel('policies.xlsx', index=False)
logging.info("Data saved to policies.xlsx")

然后运行后,就等到爬取完成了,后面也可以多线程爬,还没试,不知道是否有防爬机制。。。。

相关文章:

python爬虫-事件触发机制

今天想爬取一些政策,从政策服务 (smejs.cn) 这个网址爬取,html源码找不到链接地址,通过浏览器的开发者工具,点击以下红框 分析预览可知想要的链接地址的id有了,进行地址拼接就行 点击标头可以看到请求后端服务器的api地…...

LeetCode-day27-3106. 满足距离约束且字典序最小的字符串

LeetCode-day27-3106. 满足距离约束且字典序最小的字符串 题目描述示例示例1:示例2:示例3: 思路代码 题目描述 给你一个字符串 s 和一个整数 k 。 定义函数 distance(s1, s2) ,用于衡量两个长度为 n 的字符串 s1 和 s2 之间的距…...

C++中的static_cast函数

static_cast 是 C 中的一个类型转换操作符,用于在编译时进行类型转换。它主要用于基本数据类型之间的转换,以及类的指针或引用之间的向上转换(将派生类指针或引用转换为基类指针或引用)和某些情况下的向下转换(将基类指…...

从零开始学习网络安全渗透测试之基础入门篇——(二)Web架构前后端分离站Docker容器站OSS存储负载均衡CDN加速反向代理WAF防护

Web架构 Web架构是指构建和管理Web应用程序的方法和模式。随着技术的发展,Web架构也在不断演进。当前,最常用的Web架构包括以下几种: 单页面应用(SPA): 特点:所有用户界面逻辑和数据处理都包含…...

2679. 矩阵中的和

两种方法: 第一种:先对二维列表的每一列进行排序,然后对每一列的数据进行逐个比较,找出最大值。 class Solution:def matrixSum(self, nums: list[list[int]]) -> int:result0mlen(nums)nlen(nums[0])for i in range(m):nums…...

Unity Playables:下一代动画与音频序列

Unity的Playables API是一种灵活的系统,用于创建和控制动画、音频以及其他形式的连续媒体序列。它为开发者提供了一种全新的方法来处理游戏中的时间序列,包括动画、音频、特效等。本文将探讨Playables的基本概念、如何使用Playables API实现动画&#xf…...

matlab仿真 模拟调制(下)

(内容源自详解MATLAB/SIMULINK 通信系统建模与仿真 刘学勇编著第五章内容,有兴趣的读者请阅读原书) clear all ts0.001; t0:ts:10-ts; fs1/ts; dffs/length(t); msgrandi([-3 3],100,1); msg1msg*ones(1,fs/10); msg2reshape(ms…...

RabbitMQ是什么?

RabbitMQ是一个开源的消息代理软件(Message Broker),它实现了高级消息队列协议(AMQP,Advanced Message Queuing Protocol),并支持多种消息传递协议。它最初由英国的Rabbit Technologies开发&…...

追问试面试系列:分布式id

hi 大家好,欢迎来到追问试面试系列:分布式id 面试中可能面试官不会直接问你分布式id问题,基本上都是因为你在某些面试题回答中提到了,所以就开始追问分布式id相关问题。 先看面试题 ● 面试官:什么是分布式id? ● 面试官:举个例子说说 ● 面试官:什么叫分库分表? ●…...

护网紧急情况应对指南:Linux 应急响应手册

继上一篇:护网紧急情况应对指南:Windows版v1.2全新升级版 之后 收到小伙伴后台要Linux应急手册,今天给大家安排上。 《Linux应急手册》是一本为Linux系统管理员和运维工程师量身打造的实用指南,旨在帮助他们快速应对各种突发状况…...

WEB攻防-通用漏洞-SQL 读写注入-MYSQLMSSQLPostgreSQL

什么是高权限注入 高权限注入指的是攻击者通过SQL注入漏洞,利用具有高级权限的数据库账户(如MYSQL的root用户、MSSQL的sa用户、PostgreSQL的dba用户)执行恶意SQL语句。这些高级权限账户能够访问和修改数据库中的所有数据,甚至执行…...

【前端学习笔记】CSS基础一

一、什么是CSS 1.CSS 介绍 CSS(Cascading Style Sheets,层叠样式表)是一种用来控制网页布局和设计外观的样式语言。它使得开发者可以分离网页的内容(HTML)和表现形式(样式),提高了…...

Github遇到的问题解决方法总结(持续更新...)

1.github每次push都需要输入用户名和token的解决方法 push前,执行下面命令 : git config --global credential.helper store 之后再输入一次用户名和token之后,就不用再输入了。 2.git push时遇到“fatal: unable to access https://githu…...

数字信封+数字签名工具类测试样例(Java实现)

加解密过程 加密: 生成加密方SM2密钥对用于签名使用生成的SM2私钥生成数字签名生成SM4对称密钥对明文进行对称加密使用与解密方提前约定好的SM2公钥对第三步中的SM4对称密钥进行非对称加密把【加密方SM2公钥】、【数字签名】、【SM4对称加密后的密文】和【SM2非对…...

The Schematic workflow failed. See above.

在使用 ng new 新建Angular项目的时候会报一个错误:The Schematic workflow failed. See above. 解决办法: 只需要在后面加上 --skip-install 参数,就不会报错了。 ng new myapp --skip-install...

操作系统面试知识点总结4

#来自ウルトラマンメビウス(梦比优斯) 1 文件系统基础 1.1 文件的相关概念 文件是以计算机硬盘为载体的存储在计算机上的信息集合,可以是文本文档、图片、程序。 文件的结构:数据项、记录、文件(有结构文件、无结构式…...

Lua实现面向对象以及类的继承

0.简单前言 1、面向对象主要四个特征:封装,继承,多态,抽象 2、Lua是种简单精致小巧的语言,其本质是个表(table),变量和方法皆可看作为该表的元素。 P.S. 该博客和代码为个人编写习…...

机器学习课程学习周报五

机器学习课程学习周报五 文章目录 机器学习课程学习周报五摘要Abstract一、机器学习部分1.1 向量序列作为模型输入1.1.1 文字的向量表达1.1.2 语音的向量表达 1.2 自注意力机制原理1.2.1 自注意力机制理论1.2.2 矩阵运算自注意力机制 1.3 多头自注意力1.4 位置编码1.5 截断自注…...

vue3.0学习笔记(二)——生命周期与响应式数据(ref,reactive,toRef,toRefs函数)

1. 组合API-setup函数 使用细节: setup 是一个新的组件选项,作为组件中使用组合API的起点。从组件生命周期来看,它的执行在组件实例创建之前vue2.x的beforeCreate执行。这就意味着在setup函数中 this 还不是组件实例,this 此时是…...

C++——QT:保姆级教程,从下载到安装到用QT写出第一个程序

登录官网,在官网选择合适的qt版本进行下载 这里选择5.12.9版本 点击exe文件下载,因为服务器在国外,国内不支持,所以可以从我的网盘下载 链接: https://pan.baidu.com/s/1XMILFS1uHTenH3mH_VlPLw 提取码: 1567 --来自百度网盘超级…...

Altium Designer 系统偏好设置全解析:从新手到高手的效率跃迁

1. Altium Designer系统偏好设置的重要性 刚接触Altium Designer时,我和大多数新手一样,只关注画原理图、布局布线这些核心功能。直到有次看到同事操作,同样的操作他只用我三分之一的时间完成,我才意识到系统偏好设置的重要性。这…...

通过MCP协议集成ChatGPT桌面应用,实现AI助手无缝协作

1. 项目概述与核心价值最近在折腾AI工作流,发现一个痛点:我经常在Claude Desktop或者Cursor这类支持MCP协议的AI助手里面写代码、分析问题,但有时候需要调用ChatGPT的能力,比如让它帮我润色一段英文,或者用它的代码解释…...

小波散射网络:从理论优势到小样本图像分类实践

1. 小波散射网络为什么值得关注 第一次听说小波散射网络时,我和大多数搞机器学习的朋友反应一样:"这玩意儿和普通卷积神经网络(CNN)有什么区别?"直到去年接手一个医疗影像项目,手头只有200张标注…...

逆向工程实现GitHub Copilot HTTP API:解锁AI代码补全的无限集成可能

1. 项目概述:一个反向工程的“桥梁”如果你是一名开发者,并且对 GitHub Copilot 的智能代码补全能力印象深刻,但同时又希望能在自己偏爱的编辑器、IDE,甚至是命令行工具里直接调用它的能力,那么purocean/expose-github…...

别再死记Ld≠Lq了!从磁路角度,手把手教你区分永磁同步电机的凸极与隐极

永磁同步电机:从磁路本质破解凸极与隐极的认知迷思 在电机工程领域,永磁同步电机(PMSM)的凸极与隐极特性常被简化为"Ld≠Lq"的数学表述,这种表面化的理解就像仅通过体温判断疾病一样片面。真正掌握这一概念需要深入磁路层面&#x…...

从测试驱动到需求驱动:芯片验证范式的深度迁移与实践

1. 从“测试驱动”到“需求驱动”:一次验证范式的深度迁移干了十几年芯片验证,从早期的定向测试到后来的约束随机验证,再到覆盖率驱动验证,我亲眼看着这个领域的复杂度像坐火箭一样往上窜。现在一个SoC项目,动辄几亿门…...

第一份工作选大厂还是创业公司?5年后的差距令人深思

对于刚刚走出校门的软件测试工程师而言,第一份工作的选择,如同一场没有回头路的开局落子。它不仅仅关乎起薪的高低,更将深刻塑造你的技术视野、职业习惯和未来五年的成长曲线。五年,足以让一个初出茅庐的新人成长为独当一面的技术…...

从零构建趣味AI应用:技术架构、核心实现与部署实战

1. 项目概述与核心价值最近在GitHub上看到一个挺有意思的项目,叫miaoquai,作者是jingchang0623。光看这个名字,可能有点摸不着头脑,但点进去一看,发现这是一个关于“喵趣AI”的开源项目。作为一个在AI应用和开源社区混…...

NotebookLM知识沉淀全链路拆解(含12个真实踩坑案例与修复代码)

更多请点击: https://intelliparadigm.com 第一章:NotebookLM知识沉淀全链路概览 NotebookLM 是 Google 推出的基于用户自有文档构建可信 AI 助手的实验性工具,其核心价值在于将非结构化知识(PDF、TXT、网页等)转化为…...

基于LM567的反射式红外检测电路在智能车信标检测中的实战应用与优化

1. LM567红外检测电路基础解析 第一次接触LM567芯片是在五年前的智能车竞赛备赛期间,当时为了解决传统红外检测易受环境光干扰的问题,我们团队尝试了各种方案。这款看似普通的8脚芯片,却让我们成功实现了在强光环境下稳定工作的红外检测系统。…...