【实战】基于urllib和BeautifulSoup爬取jsp网站的数据

embedded/2024/11/25 13:41:48/

文章目录

    • 前言
    • 目标网站分析
    • 目标网页爬取
    • 数据解析
    • 导出数据
    • 其他问题处理
      • 分页检索及多关键字搜索去重
      • cookie问题
    • 工具封装
    • 经验总结

前言

网络数据爬取大致分为两类:

静态爬取:该种方式针对那种架构比较老的网站,使用模版方式,通过浏览器F12只能找到静态页面,找不到返回json数据的接口,数据以html的方式存在

api爬取:网站采用前后端分离架构,可以很容易找到接口,获取json数据,这种爬取比较简单,只需按照规则调用接口即可获取目标数据。

这里仅介绍复杂一些的静态爬取方式。

目标网站分析

​ 以湖北省政府采购网为例,https://www.ccgp-hubei.gov.cn/,爬取湖北省招投标信息,将结果导出到excel。

通过分析,该网站找不到restfui的接口,全部是静态页面,使用jsp技术建设,jsp技术是直接在后端将数据写入页面模板,然后再返回前端的,所以不可能找到restful接口的。但是发现有一个招投标信息的检索站点,https://www.ccgp-hubei.gov.cn:9040/quSer/searchXmgg.html,这个站点和首页站点是存在跨域的,因为端口不一致。但是查询数据返回又是另外一个地址https://www.ccgp-hubei.gov.cn:9040/quSer/search,这个地址返回所有查询数据并分页显示,返回数据格式为html,且带了检索参数。

​ 使用apipost工具,模拟该接口请求,如下:

在这里插入图片描述

在这里插入图片描述

经过调试发现几点规律:

1 该接口使用POST协议,发送检索参数,并返回html数据

2 接口调用需要带cookie,且cookie有有效期限制(这一点很重要)

目标网页爬取

通过上一步分析得到的规律,开始使用urllib模拟浏览器调用

# 获取待解析网页
def get_html(key, page_no, page_size, begin_date, end_date):url = 'https://www.ccgp-hubei.gov.cn:9040/quSer/search'param = {"queryInfo.type": "xmgg","queryInfo.city": "武汉市","q

http://www.ppmy.cn/embedded/140388.html

相关文章

【es6进阶】vue3中的数据劫持的最新实现方案的proxy的详解

vuejs中实现数据的劫持,v2中使用的是Object.defineProperty()来实现的,在大版本v3中彻底重写了这部分,使用了proxy这个数据代理的方式,来修复了v2中对数组和对象的劫持的遗留问题。 proxy是什么 Proxy 用于修改某些操作的默认行为&#xff0…

RocketMQ的使⽤

初识MQ 1.1.同步和异步通讯 微服务间通讯有同步和异步两种⽅式: 同步通讯:就像打电话,需要实时响应。 异步通讯:就像发邮件,不需要⻢上回复。 两种⽅式各有优劣,打电话可以⽴即得到响应,但…

macOS 无法安装第三方app,启用任何来源的方法

升级新版本 MacOS 后,安装下载的软件时,不能在 ”安全性与隐私” 中找不到 ”任何来源” 选项。 1. 允许展示任何来源 点击 启动器 (Launchpad) – 其他 (Other) – 终端 (Terminal): 打开终端后,输入以下代码回车: …

Java安卓导航栏设计开发(实战篇)——第十一期

1&#xff0c;设计构思&#xff1a; 导航栏应当具备以下条件&#xff1a; 点击导航栏中的按钮&#xff0c;以用来切换界面点击导航栏应当只显示目前界面变色图标导航栏应当附贴到全部界面的最下方 ——既然需要附贴到最下方&#xff0c;可以使用【相对布局 <RelativeLayout…

《Python基础》之循环结构

目录 简介 一、for循环 1、基本语法与作用 2、使用 range() 函数配合 for 循环 3、嵌套的for循环 二、while循环 1、基本语法与作用 2、while 循环嵌套 &#xff08;1&#xff09;、while循环与while循环嵌套 &#xff08;2&#xff09;、while循环与for循环嵌套 简介 …

原生安卓和ios开发的app和uniapp开发的app都有什么特点

原生安卓和iOS开发的app与uniapp开发的app在开发成本、性能表现以及用户体验等方面存在区别。以下是具体分析&#xff1a; 开发成本 原生安卓和iOS开发&#xff1a;需要分别为每个平台编写代码&#xff0c;因此开发成本较高。开发者需要具备多个平台的专业知识&#xff0c;这增…

网络编程day2.2~day3——TCP并发服务器

笔记脑图 作业&#xff1a;多进程多线程并发服务器实现一遍提交。 多进程 #include <stdio.h> #include <string.h> #include <myhead.h> #define IP "192.168.60.44" #define PORT 6666 #define BACKLOG 20 void fun(int sss) {if(sssSIGCHLD){…

Java项目实战II基于SPringBoot的玩具销售商城管理系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着儿童娱乐与教育需求的…