网络爬虫实战 | 上传以及下载处理后的文件

以实现爬虫一个简单的(SimFIR (doctrp.top))网址为例,需要遵循几个步骤:

1. 分析网页结构

  • 首先,需要分析该网页的结构,了解图片是如何存储和组织的。这通常涉及查看网页的HTML源代码,可能还包括CSS和JavaScript文件。
  • 检查图片URL的模式,看看是否有规律可循,这将有助于编写爬虫时定位和下载图片。

2. 编写爬虫代码

  • 使用Python中的库,如requests来访问网页,BeautifulSoup来解析HTML。
  • 编写代码以遍历网页,定位图片链接,并将它们下载到您的本地存储。

3. 实现畸变矫正

  • 选择适合的畸变矫正算法。需要使用像OpenCV这样的图像处理库。
  • 编写代码以批量读取下载的图片,应用畸变矫正算法,并保存矫正后的图片。

4. 自动化和优化

  • 使整个过程自动化,以便只需运行一个脚本即可完成从爬取到矫正的整个流程。
  • 确保您的代码在处理大量数据时效率高并且稳定。

实战开始 

观察到红色框内"点击上传"处上传文件,然后点击按钮"Submit"实现文件上传;转换后的图片会显示在绿色框内,可点击"Download"按钮下载。

1)找到正确的URL

        通常这些信息可以从网络请求中找到,使用浏览器的开发者工具观察网络请求。在浏览器中打开开发者工具(通常可以通过按F12或右键检查来打开),然后尝试正常上传一个文件。在"网络"(Network)选项卡中,可以监控到所有由网页发出的HTTP请求。找到文件上传时的请求,可以看到请求的URL、方法、请求头和请求体等信息。这里的URL就是上传接口的URL。

可以看到几个请求:

  • 一个 data:image/jpeg;base64, 开头的请求,这是一个 Base64 编码的图片数据,可能是上传的图片。
  • 一个名为 predict 的请求,这很可能是触发图片处理的 API 调用。
  • 一个字体请求,看起来与图片上传和下载无关。
  • 一个 data:image/png;base64, 开头的请求,这可能是处理后的图片。

从这些信息来看,处理后的图片可能是直接作为 Base64 编码的数据嵌入在某个API响应中的。如果 predict 请求是用来处理图片的,那么需要查看这个请求的详细内容,包括它的响应体。响应体中可能包含了处理后的图片的 Base64 编码数据。

可以看到请求了predict的URL:


2)观察服务器期望的数据形式

        在编程过程中,可以打印print(response.text),观察服务器的期望。

session = requests.Session()
response = session.post("https://simfir.doctrp.top:20443/run/predict", json={'data': [base64.b64encode(image_file.read()).decode('utf-8')]}, verify=False)
# 检查响应
if response.ok:else:print('获取处理后的图片失败,状态码:', response.status_code)print(response.text)

        发现服务器期望在 data 字段中接收一个列表。这意味着需要将图片数据作为列表的元素发送,即使只有一个图片。服务器返回的是一个列表,那么从列表中提取图像数据。

        接受到的processed_image_data_list[0]在解码中无法正确解码图片,困惑我好久,最后注意到是因为前面包含了'data:image/png;base64,'字段,然后去除字段就可以正常编码了。

3)代码实现

注释详细,简单易懂:

import requests
import time
import base64
import os# 禁用由于未验证的SSL证书引发的警告
requests.packages.urllib3.disable_warnings()# 指定服务器的URL
url = 'https://simfir.doctrp.top:20443/'# 图片的本地路径,需要发送到服务器的图片
local_image_path = '1.jpg'# 处理图像的服务器端点
processed_image_endpoint = url + 'run/predict'# 创建一个会话,这在需要维持会话状态时很有用,例如进行多次请求
session = requests.Session()# 以二进制读取模式打开本地图片文件
with open(local_image_path, 'rb') as image_file:# 将图片文件编码为base64字符串,这是将二进制内容转换为可以通过JSON发送的文本格式的一种方式image_encoded = base64.b64encode(image_file.read()).decode('utf-8')# 准备请求数据,将编码的图片数据放入data字段中
data_to_send = {'data': [image_encoded]}# 向服务器发送POST请求,并附上编码的图片数据,verify=False表示忽略SSL证书验证
response = session.post(processed_image_endpoint, json=data_to_send, verify=False)# 检查响应状态码是否表明请求成功
if response.ok:# 假设服务器会返回JSON格式的响应,并且包含了处理后的图像数据processed_image_data_list = response.json().get('data')# 检查返回的数据是否是列表形式if processed_image_data_list and isinstance(processed_image_data_list, list):# 获取列表中的第一个元素,即处理后的图像数据encoded_data = processed_image_data_list[0]# 假设数据以data:image/png;base64,开头,这需要被移除encoded_data = encoded_data.split('data:image/png;base64,')[1].rstrip(' \n\r')# 输出编码后的数据,用于调试print(encoded_data)# 如果编码数据长度不是4的倍数,则添加必要的'='填充字符padding = '=' * (-len(encoded_data) % 4)encoded_data_with_padding = encoded_data + paddingtry:# 尝试对带填充字符的base64字符串进行解码image_data = base64.b64decode(encoded_data_with_padding)# 指定输出图像的路径output_image_path = os.path.join('output_image.png')# 将解码后的图像数据写入到文件中with open(output_image_path, 'wb') as file:file.write(image_data)# 打印成功消息print('转换后的图片已成功保存到', output_image_path)except base64.binascii.Error as e:# 如果解码失败,打印错误信息print("Base64 解码失败:", e)else:# 如果响应数据不是列表形式,打印错误信息print('响应中未找到列表形式的图片数据')
else:# 如果请求失败,打印状态码和错误信息print('获取处理后的图片失败,状态码:', response.status_code)print(response.text)

最终实现文件上传—> 处理文件—> 接收文件

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于FPGA的ECG信号滤波与心率计算verilog实现,包含testbench

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 ECG信号的特点与噪声 4.2 FPGA在ECG信号处理中的应用 4.3 ECG信号滤波原理 4.4 心率计算原理 4.5 FPGA在ECG信号处理中的优势 5.算法完整程序工程 1.算法运行效果图预览 其RTL结构如…

C++集群聊天服务器 muduo+nginx+redis+mysql数据库连接池 笔记 (下)

C集群聊天服务器 网络模块业务模块CMake构建项目 笔记 (上)-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/135991635?spm1001.2014.3001.5501C集群聊天服务器 数据模块业务模块CMake构建项目 笔记 (上)-CSDN博…

free pascal:fpwebview 组件通过JSBridge调用本机TTS

从 https://github.com/PierceNg/fpwebview 下载 fpwebview-master.zip 简单易用。 先请看 \fpwebview-master\README.md cd \lazarus\projects\fpwebview-master\demo\js_bidir 学习 js_bidir.lpr ,编写 js_bind_speak.lpr 如下,通过JSBridge调用本机…

协调尺度:特征缩放在机器学习中的重要作用

目录 一、介绍 二、背景知识 三、了解功能缩放 四、特征缩放方法 五、特征缩放的重要性 六、实际意义 七、代码 八、结论 一、介绍 特征缩放是机器学习和数据分析预处理阶段的关键步骤,在优化各种算法的性能和效率方面起着至关重要的作用。本文深入探讨了特征缩放的…

什么是内存对齐?如何计算结构体类型的大小?

结构体内存对齐与结构体类型的大小 运行这样一段代码 我们想要计算这两个结构体类型的大小,而这个结构体类型里面成员变量有一个int类型和两个char类型,大小加起来应该是六个字节,但是我们打印出来发现,结果居然是12和8&#xff…

4.5 用qml实现横向滑动的多个页面

一、效果展示 带上main.qml,一共4个page。第4个page上面有一个按钮,点击则会直接返回的到首页,也就是第1个page。 二、main.qml中的代码 import QtQuick import QtQuick.Controls //若要使用控件,则导入该包ApplicationWindow …

Apache httpd 换行解析漏洞复现(CVE-2017-15715)

Web页面&#xff1a; 新建一个一句话木马&#xff1a; 0.php <?php system($_GET[0]); ?> 上传木马&#xff0c; burpsuite 抓包。 直接上传是回显 bad file。 我们查看数据包的二进制内容&#xff08;hex&#xff09;&#xff0c;内容是以16进制显示的&#xff0c;…

【Go语言】第一个Go程序

第一个 Go 程序 1 安装 Go Go语言官网&#xff1a;Download and install - The Go Programming Language&#xff0c;提供了安装包以及引导流程。 以 Windows 为例&#xff0c;进入windows安装包下载地址&#xff1a;All releases - The Go Programming Language&#xff0c…

unity的重中之重:组件

检查器&#xff08;Hierarchy&#xff09;面板中的所有东西都是组件。日后多数工作都是和组件打交道&#xff0c;包括调参、自定义脚本组件。 文章目录 12 游戏的灵魂&#xff0c;脚本组件13 玩转脚本组件14 尽职的一生&#xff0c;了解组件的生命周期15 不能插队&#xff01;…

【蓝桥杯单片机入门记录】LED灯(附多个例程)

目录 一、LED灯概述 1.1 LED发光原理 1.2电路原理图 1.3电路实物图 1.4 开发板LED灯原理图 1.4.1共阳极LED灯操控原理&#xff08;本开发板&#xff09; &#xff08;非实际原理图&#xff0c;便于理解版本&#xff09;由图可以看出&#xff0c;每个LED灯的左边&#xf…

[OPEN SQL] 更新数据

UPDATE语句用于更新数据库表中的数据 本次操作使用的数据库表为SCUSTOM&#xff0c;其字段内容如下所示 航班用户(SCUSTOM) 需要操作更新以下数据 1.更新单条数据 语法格式 UPDATE <dbtab> FROM <wa>. UPDATE <dbtab> FROM TABLE <itab>. UPDATE &l…

Ps:曝光度

曝光度 Exposure命令在处理图像时&#xff0c;尤其是针对 32 位 HDR 图像&#xff0c;通常在线性颜色空间&#xff08;即灰度系数为 1.0&#xff09;中执行计算&#xff0c;这意味着它对图像的亮度进行直接和线性的调整。 这种处理方式特别适合处理高动态范围内容&#xff0c;因…

【PyQt6】QScreen 屏幕截屏

文章目录 0 环境1 简介2 QScreen 类2.1 获取 QScreen 的对象2.2 QScreen 的常见信息 3. 示例代码 0 环境 - Python 3.12.1 - PyQt6 6.6.1 pip install PyQt6 PyQt6-Qt6 6.6.1 默认安装PyQt6-sip 13.6.…

SAP PP学习笔记- 豆知识01 - 怎么查询既存品目

SAP系统当中已经有哪些品目要怎么查询呢&#xff1f; 1&#xff0c;MM60 品目一览 这里可以输入Plant&#xff0c;然后可以查询该工厂的所有品目。 2&#xff0c;SE16 > MARA MARA 品目一般Data&#xff0c;存放的是品目基本信息。 如果要查询该品目属于哪个Plant&#x…

英语题不会怎么搜答案?分享五个支持答案和解析的工具 #学习方法#媒体

在大学的学习过程中&#xff0c;我们常常会遇到一些难以解决的问题&#xff0c;有时候甚至会感到束手无策。然而&#xff0c;如今的技术发展给我们提供了新的解决方案。搜题软件作为一种强大的学习工具&#xff0c;正在被越来越多的大学生所接受和使用。今天&#xff0c;我将为…

2007-2021年上市公司内控信息披露指数/上市公司内部控制信息披露指数数据

2007-2021年上市公司内控信息披露指数/上市公司内部控制信息披露指数数据 1、时间&#xff1a;2007-2021年 2、范围&#xff1a;上市公司 3、指标&#xff1a;证券代码、证券简称、辖区、证监会行业、申万行业、内部环境、风险评估、控制活动、信息与沟通、内部监督、内部控…

[Python] 文件

这篇是Python基础语法的一个结尾了&#xff0c;还是可莉跟着大家一起学习哦~ 可莉将这篇博客收录在&#xff1a;《Python》 可莉推荐的优质博主主页&#xff1a;Keven ’ s blog 目录 一、文件是什么 二、常用的文件操作函数 1、打开文件 2、关闭文件 3、读取文件 read( ) …

LabVIEW荧光显微镜下微管运动仿真系统开发

LabVIEW荧光显微镜下微管运动仿真系统开发 在生物医学研究中&#xff0c;对微管运动的观察和分析至关重要。介绍了一个基于LabVIEW的仿真系统&#xff0c;模拟荧光显微镜下微管的运动过程。该系统提供了一个高效、可靠的工具&#xff0c;用于研究微管与运动蛋白&#xff08;如…

【教学类-19-07】20240214《ABAB式-规律黏贴18格-手工纸15*15CM-一页一种图案,A空,竖向、有边框》(中班)

背景需求 利用15*15CM手工纸制作AB色块手环&#xff08;手工纸自带色彩&#xff09; 素材准备 代码展示 作者&#xff1a;阿夏 时间&#xff1a;2024年2月14日 名称&#xff1a;正方形数字卡片AB图案 _ 华光彩云_CNKI A的位置有图案 A空18格 AB向 一页一种图案&#xff0c;…

OAuth 2.0 协议介绍【实现 GitHub 第三方登录】

OAuth&#xff08;是 Open Authorization 开放授权的缩写&#xff09;,在全世界得到广泛应用&#xff0c;目前的版本是2.0版。 本文会对OAuth 2.0的设计思路和运行流程&#xff0c;做一个简明通俗的解释&#xff0c;主要参考材料为RFC 6749。 OAuth 2.0 是一个开放标准&#…