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

Flask框架小程序后端分离开发学习笔记《4》向服务器端发送模拟请求-爬虫

Flask框架小程序后端分离开发学习笔记《4》向服务器端发送模拟请求-爬虫

Flask是使用python的后端,由于小程序需要后端开发,遂学习一下后端开发。
下面代码,是一个比较老的版本了,可以借鉴一下。

import socket
import ssldef parsed_url(url):#检查协议protocol = 'http'if url[:7] == 'http://':u = url.split('://')[1]elif url[:8] == 'https://':protocol = 'https'u = url.split('://')[1]else:#':/l '定位然后取第一个/的位置来切片u = url# 经过这样,url中的协议被切掉了,注意切片后数组下标由0开始# 例如 https://www.baidu.com:2024/apple# 切除后 www.baidu.com:2024/apple# 检查默认pathi = u.find('/')if i == -1:host = upath ='/'else:host = u[:i]path = u[i:]# 这一步处理过后# host = www.baidu.com:2024# path = apple# 检查端口# 默认端口port_dict = {'http': 80,'https': 443,}# 非默认端口port = port_dict[protocol]if ':' in host:h = host.split(':')# print(h)  测试用,当控制台说哪有问题,阔以尝试使用打印大法,看看是啥问题host = h[0]port = int(h[1])return protocol, host, port, path#以下test开头的函数是单元测试
def test_parsed_url():#parsed_url函数很容易出错,所以我们写测试函数来运行看检测是否正确运mhttp = 'http'https = 'https'host = 'g.cn'path = '/'test_items = [('http://g.cn', (http,host,80,path)),('http://g.cn/', (http,host,80,path)),('http://g.cn:90',(http, host,90,path)),('http://g.cn:90/', (http,host, 90,path)),# 这里面的都是典型测试用例即可('https://g.cn', (https,host,443,path)),('https://g.cn:233/',(https,host,233,path)),]for t in test_items:url, expected = tu = parsed_url(url)# assert是一个语句,名字叫断言# 如果断言成功,条件成立,则通过测试,否则为测试失败,中断程序报错e = "parsed_url ERROR,{}{}{}".format(url,u,expected)assert u == expected, e    # 如果u == expected为true,就没问题,继续;否则就会中断,然后打印e# print("test_parsed_url测试通过!")def socket_by_protocol(protocol,host):# 根据协议返回一个socket实例s = socket.socket()if protocol == 'https':# 创建一个默认的SSL上下文环境context = ssl.create_default_context()# 使用SSL上下文环境来包装socket对象s = context.wrap_socket(s, server_hostname=host)return sdef response_by_socket(s):# 持续接收响应,返回响应的byte型# 参数是一个socket实例# 返回这个socket读取的所有数据response = b''buffer_size = 1024while True:r = s.recv(buffer_size)if len(r) == 0:breakresponse += rreturn responsedef parsed_response(r):# 把response解析出状态码headers body返回# 状态码是int# headers 是dict# body是strheader, body = r.split('\r\n\r\n',1)     # \r\n\r\n是其分界线h = header.split('\r\n')   # 就会切分很多行  例如:HTTP/1.1 301 Moved Permanentlystatus_code = h[0].split()[1]   # h[0]就是响应行 status_code=301  按照空格切分status_code = int(status_code)headers = {}for line in h[1:]:   # 把响应Header部分每一行都存成字典k, v = line.split(': ')headers[k] = vreturn status_code, headers, bodydef get(url):# 用GET请求url并返回响应protocol,host,port,path= parsed_url(url)# 因为协议不一样,socket实例构建方式不同s = socket_by_protocol(protocol,host)s.connect((host,port))request = 'GET HTTP/1.1\r\nhost: {}\r\nconnectibn: close\r\n\r\n'.format(path,host)encoding = 'utf-8's.send(request.encode(encoding))response = response_by_socket(s)r = response.decode(encoding)# 利用parsed_response处理接收到的响应,分别得到想要的东西status_code, headers, body = parsed_response(r)if status_code in [301, 302]:     # 301、302说明是需要重定向url = headers['Location']return get(url)return status_code, headers, bodydef test_get():# 测试是否能正确处理HTTP和HTTPSurls = ['http://movie.douban.com/top250','https://movie.douban.com/top250',]# 这里就直接调用了get如果出错就会挂,测试得比较简单for u in urls:status_code, headers, body = get(u)print(status_code,headers,body)def test():# 用于测试的主函数test_parsed_url()test_get()# test_parsed_response()if __name__ == '__main__':test()# main()# 代码注意模块化,写what不写how,不写具体怎么实现,具体怎么实现就封装起来

最后尝试请求豆瓣的网页,并未得到,我怀疑是有反爬手段,我们的请求数据还有很多东西没加进去,所以看起来不像是浏览器发送的请求,后续会继续学习,解决这个问题。

相关文章:

Flask框架小程序后端分离开发学习笔记《4》向服务器端发送模拟请求-爬虫

Flask框架小程序后端分离开发学习笔记《4》向服务器端发送模拟请求-爬虫 Flask是使用python的后端,由于小程序需要后端开发,遂学习一下后端开发。 下面代码,是一个比较老的版本了,可以借鉴一下。 import socket import ssldef p…...

Android在系统界面上添加窗口

WindowManager.addView()是Android中的一个方法,用于在屏幕上添加一个窗口。它允许你在应用程序的上下文之外创建一个窗口,并将其显示在其他应用程序或系统界面上。 新建一个自定义View用于显示 class MyView JvmOverloads constructor(context: Contex…...

【正点原子STM32】STM32原理图设计(芯片手册和数据手册、常见引脚类型、最小系统和IO分配)

一、学会查看数据手册 获取芯片数据手册数据手册内容概要芯片的基本参数(STM32F103ZET6为例)正点原子开发板对应的主控型号和封装STM32F103ZET6引脚分布常见的STM32引脚类型下载接口 二、最小系统 电源电路复位电路BOOT启动电路晶振电路下载调试电路串…...

低代码自动化平台| 游戏规则改变者

自动化测试对于软件开发公司起着非常重要的作用。它在公司及其客户之间建立了对优质产品的信任。此外,它还使软件开发人员更加自信,因为他们可以在其他模块上工作,而不必担心应用程序的任何现有功能是否存在错误。在软件测试中融入自动化是必…...

【分享】MathWorks中国汽车年会:“软件定义汽车”

从软件赋能到软件定义,汽车行业不仅需要解决诸如错误发现滞后带来的高昂代价、功能融合所需的跨学科知识、功能安全与实施成本之间的权衡等老问题,也面临着新的挑战:软件复杂度的不断提升、利用数据驱动创造价值、人工智能的引入和实现、数字…...

RNN:Long Short-term Memory(中)

目录 1 LSTM 的简图 2 LSTM 的整体结构 2.1 结构图 2.2 流程图 3 举个例子 3.1 简单看看 3.2 代入 LSTM 4 Original Network v.s. LSTM 5 细看 LSTM 原视频:李宏毅 2020:Recurrent Neural Network (Part I) 1 LSTM 的简图 LSTM 实际…...

C# .NET读取Excel文件并将数据导出到DataTable、数据库及文本

Excel文件是存储表格数据的普遍格式,因此能够高效地读取和提取信息对于我们来说至关重要。C#语言借助.NET Framework和各种库的广泛功能,能够进行高效的数据操作。利用C#读取Excel文件并将数据写入数据库和DataTable,或者将数据用于其他目的&…...

移动云助力智慧交通数智化升级

智慧交通是在整个交通运输领域充分利用物联网、空间感知、云计算、移动互联网等新一代信息技术,综合运用交通科学、系统方法、人工智能、知识挖掘等理论与工具,以全面感知、深度融合、主动服务、科学决策为目标,推动交通运输更安全、更高效、…...

【Vue技巧】vue 阻止a链接跳转事件的两种方法

ChatGPT4.0国内站点&#xff0c;支持设计稿转代码&#xff1a;https://www.atalk-ai.com/ 在Vue中&#xff0c;如果你想阻止<a>链接的默认跳转事件&#xff0c;你可以使用click.prevent或者click配合.prevent修饰符。这样做可以阻止链接的默认行为&#xff0c;即不会跳转…...

006.Oracle事务处理

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…...

成功解决VScode进入到内置函数中调试

主要有两个关键步骤&#xff0c; 第一步 将launch.json中的"justMyCode"设为false 可通过使用ctrlshiftP搜索lauch.json找到次文件 如果找不到的话&#xff0c;可点击debug按钮&#xff0c;然后找到点击create a launch.json file创建 创建得到的launch.json如下&am…...

29、WEB攻防——通用漏洞SQL注入增删改查盲注延迟布尔报错

文章目录 盲注增删改查 盲注 概念&#xff1a;在注入过程中&#xff0c;获取的数据不能回显至前端页面&#xff0c;此时我们需要利用一些方法进行判断或尝试&#xff0c;这个过程被称为盲注。 解决&#xff1a;常规的联合查询注入不行的情况。 分类&#xff1a; 基于布尔的SQ…...

【设计模式 行为型】策略模式

它允许在运行时根据需要选择算法的行为。该模式通过将算法封装成独立的类&#xff0c;使得它们可以相互替换&#xff0c;而不影响使用算法的客户端代码。 策略模式主要包含以下角色&#xff1a; 环境&#xff08;Context&#xff09;&#xff1a;环境对象持有一个策略对象的引…...

JVM:双亲委派机制类加载器

JVM&#xff1a;双亲委派机制 1. 例子2. 类加载器总结3. 类加载过程4. 双亲委派模型的执行流程&#xff1a;5. 双亲委派模型的好处 1. 例子 Java运行时环境有一个java.lang包&#xff0c;里面有一个ClassLoader类 我们自定义一个String类在java.lang包下&#xff0c;下面的…...

从入门到精通:ThinkPHP6异步请求的全面解析!

在ThinkPHP6中使用异步请求 在Web应用程序的开发中&#xff0c;经常会需要使用异步请求。异步请求能够在后台执行而不干扰页面的其他操作&#xff0c;提高了用户的体验。而在ThinkPHP6框架中&#xff0c;也提供了方便的异步请求方式&#xff0c;本文将详细介绍如何在ThinkPHP6…...

C++写csv文件

C写csv文件 其中有一个点需要注意&#xff0c;csv芬里尔之间要用逗号隔开 p_str_filename "D:\\1.csv"; int writelog(string p_str_filename, double p_double[]) {SYSTEMTIME timeCur;GetLocalTime(&timeCur);char t_logbuffer[1024] { 0 };sprintf(t_logbu…...

将Matlab图窗中的可视化保存为背景透明的矢量图

将matlab绘制的结果复制为矢量图时&#xff0c;去除背景的操作如下&#xff1a; 先打开/绘制图形窗口(不要关闭)在命令行终端输入axis off关闭坐标系继续在命令行终端分别输入&#xff1a; ax gca; copygraphics(ax,ContentType,vector,BackgroundColor,none); 此时&#xff…...

希尔(Shell)排序

文章目录 希尔排序的基本思想本质增量&#xff08;间隔&#xff09;的选取 希尔排序的时间复杂度希尔排序代码实现希尔排序的稳定性 希尔排序的基本思想 将要排序的序列按一定间隔&#xff08;增量&#xff09;分组&#xff0c;将每一组的数据按插入排序进行排序&#xff0c;再…...

【已解决】Qt Creator设计模式被禁用不能点的原因及解决方案

Qt Creator 下载地址&#xff08;含历史版本&#xff09;&#xff1a;https://download.qt.io/official_releases/qtcreator/ 症状 Qt Creator 目前最新版为12.0.1&#xff0c;安装后打开.qml文件发现设计工具图标为禁用状态。 原因及解决方案 根据官网材料&#xff08;Qt C…...

树莓派5 Ubuntu 23.04 安装 DisplayLink 驱动

树莓派5 Ubuntu 23.04 安装 DisplayLink 驱动 PreparationSynaptics APT RepositoryInstall evdiInstall displaylink-driver Preparation lsusb -d 17e9: sudo apt-get install dkmsSynaptics APT Repository wget https://www.synaptics.com/sites/default/files/Ubuntu/po…...

PXE装机避坑大全:从TFTP根目录设置到Kickstart无人值守的13个常见错误修复

PXE装机避坑大全&#xff1a;从TFTP根目录设置到Kickstart无人值守的13个常见错误修复 在企业级IT运维中&#xff0c;PXE&#xff08;预启动执行环境&#xff09;网络装机技术因其高效、自动化的特点&#xff0c;已成为服务器批量部署的标配方案。但看似简单的PXE部署流程背后&…...

Qt桌面应用集成PaddleOCR:从环境搭建到精准识别的实践指南

1. 环境准备&#xff1a;搭建PaddleOCR的Qt开发环境 第一次在Qt里折腾PaddleOCR时&#xff0c;我对着官方文档折腾了半天还是报错&#xff0c;后来发现是第三方库的路径没配好。这里分享下我踩坑后总结的可靠方案。 核心依赖三件套&#xff1a;PaddlePaddle推理库、PaddleOCR C…...

从原理到代码:深入解析UniFormer的多头关系聚合器(MHRA)设计

从原理到代码&#xff1a;深入解析UniFormer的多头关系聚合器(MHRA)设计 视频理解领域近年来经历了从3D卷积网络到视觉Transformer的范式转变&#xff0c;但两者在时空特征提取上各有限制。3D CNN擅长捕捉局部时空特征却受限于固定感受野&#xff0c;而视觉Transformer虽能建模…...

SGMICRO圣邦微 SGM803B-JXN3G/TR SOT-23-3 监控和复位芯片

特性 适用于MAX803/MAX809/MAX810和ADM803/ADM809/ADM810的卓越升级版 高精度固定检测选项:3V、3.3V和5V 低供电电流:300nA(典型值)上电复位脉冲宽度:150毫秒(最小值) 复位输出选项: 开漏nRESET输出(SGM803B)推挽nRESET输出(SGM809B) . . 推挽复位输出(SGM810B)复位有效电压低至…...

从LaMa到BrushNet:盘点图像修复(Inpainting)领域的关键模型与实战数据集

1. 图像修复技术的前世今生 第一次接触图像修复技术是在2015年&#xff0c;当时我正参与一个老照片修复项目。那些泛黄的老照片上布满了裂痕和污渍&#xff0c;传统Photoshop修复需要耗费数小时。直到发现深度学习可以自动完成这项任务&#xff0c;我才意识到这项技术将彻底改变…...

手机号查询QQ号:技术解析与实用指南

手机号查询QQ号&#xff1a;技术解析与实用指南 【免费下载链接】phone2qq 项目地址: https://gitcode.com/gh_mirrors/ph/phone2qq 当你更换手机后忘记QQ账号&#xff0c;或需要验证手机号与QQ的绑定关系时&#xff0c;phone2qq项目提供了一种高效解决方案。这是一个基…...

音频驱动面部动画:Audio2Face技术原理与实践指南

音频驱动面部动画&#xff1a;Audio2Face技术原理与实践指南 【免费下载链接】FACEGOOD-Audio2Face http://www.facegood.cc 项目地址: https://gitcode.com/gh_mirrors/fa/FACEGOOD-Audio2Face 在虚拟人技术快速发展的今天&#xff0c;面部动画的自然度成为提升用户体验…...

手把手教你用PyTorch 2.0复现风源AI气象模型(附GitHub源码解读)

手把手教你用PyTorch 2.0复现风源AI气象模型&#xff08;附GitHub源码解读&#xff09; 气象预测正经历从传统数值模拟到AI驱动的范式转移。本文将带您深入风源模型的技术内核——一个融合卫星遥感与深度学习的混合架构&#xff0c;通过PyTorch 2.0实现从数据预处理到模型推理的…...

S32K312实战:用AUTOSAR Icu模块测量PWM占空比与周期(基于NXP MCAL与EB Tresos)

S32K312实战&#xff1a;AUTOSAR Icu模块精准测量PWM信号的工程实践 在汽车电子开发中&#xff0c;PWM信号的精确测量是ECU功能实现的基础环节。无论是发动机控制单元中的转速信号采集&#xff0c;还是车身电子中的执行器状态反馈&#xff0c;都需要对PWM信号的周期、占空比等参…...

BEYOND REALITY Z-Image新手入门:三步生成你的第一张8K写真人像

BEYOND REALITY Z-Image新手入门&#xff1a;三步生成你的第一张8K写真人像 1. 为什么选择BEYOND REALITY Z-Image&#xff1f; 在当前的AI图像生成领域&#xff0c;写实人像一直是最具挑战性的任务之一。传统模型往往难以平衡细节精度与自然感&#xff0c;生成的图片要么过于…...