当前位置: 首页 > 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…...

Halcon实战:当键盘字符印刷检测遇上位置偏移和亮度不均,差异化模型如何“稳如泰山”?

Halcon差异化模型在键盘字符印刷检测中的实战应用 键盘字符印刷检测是工业视觉领域最具挑战性的任务之一。想象一下&#xff0c;当数千个键盘以每分钟数十个的速度通过传送带时&#xff0c;每个按键上的字符都可能存在印刷缺陷——多墨、少墨、模糊、偏移&#xff0c;甚至完全缺…...

AI周报如何成为技术决策的精准导航仪

1. 项目概述&#xff1a;一份真正值得花时间读的AI周报&#xff0c;到底长什么样&#xff1f;我做技术类内容整理和分发已经十一年了&#xff0c;从2014年最早在知乎写“每周机器学习论文速览”&#xff0c;到后来运营三个垂直技术社群、给二十多家企业做AI落地咨询&#xff0c…...

RT-Trace升级:集成GDB Server与一键烧录,打造嵌入式开发调试平台

1. 项目概述&#xff1a;嵌入式开发的“瑞士军刀”再进化如果你是一名嵌入式开发者&#xff0c;最近可能被一个词刷屏了——RT-Trace。这已经不是它第一次带来惊喜了。最初&#xff0c;它以非侵入式的实时追踪和性能分析能力&#xff0c;在RT-Thread社区里掀起了一阵热潮&#…...

TV Bro:终极智能电视浏览器解决方案 - 让大屏上网变得简单快速

TV Bro&#xff1a;终极智能电视浏览器解决方案 - 让大屏上网变得简单快速 【免费下载链接】tv-bro Simple web browser for android optimized to use with TV remote 项目地址: https://gitcode.com/gh_mirrors/tv/tv-bro 您是否曾经对着智能电视的浏览器感到沮丧&…...

奇迹 MU 荣耀出征 新区开区 最新地址官方正版下载

《奇迹 MU 荣耀出征》是正版授权的复古魔幻 MMORPG 手游&#xff0c;完美复刻端游 1.03H 黄金版本核心玩法&#xff0c;逐光娱手游官网https://www.gw648.com提供官方正规下载渠道&#xff0c;带你重回艾瑞西亚大陆&#xff0c;再续荣耀传奇。 官方正版下载渠道 《奇迹 MU 荣耀…...

fastapi · FastAPI framework, high performance, easy to learn, fast to code, ready for production

fastapi FastAPI framework, high performance, easy to learn, fast to code, ready for production 本文整理自 GitHub&#xff0c;经重新整理编辑。 FastAPI framework, high performance, easy to learn, fast to code, ready for production Documentation: https://fas…...

如何在5分钟内掌握DistroAV网络视频传输:新手完整指南

如何在5分钟内掌握DistroAV网络视频传输&#xff1a;新手完整指南 【免费下载链接】obs-ndi DistroAV (formerly OBS-NDI): NDI integration for OBS Studio 项目地址: https://gitcode.com/gh_mirrors/ob/obs-ndi 还在为复杂的直播布线烦恼吗&#xff1f;想要在不同设备…...

基于Windows内核驱动框架的游戏控制器虚拟化技术实现方案

基于Windows内核驱动框架的游戏控制器虚拟化技术实现方案 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 在Windows游戏生态系统中&#xff0c;设备兼容性一…...

Octree-GS终极指南:如何用LOD结构化3D高斯实现实时大规模场景渲染

Octree-GS终极指南&#xff1a;如何用LOD结构化3D高斯实现实时大规模场景渲染 【免费下载链接】Octree-GS [TPAMI 2025] Octree-GS: Towards Consistent Real-time Rendering with LOD-Structured 3D Gaussians 项目地址: https://gitcode.com/GitHub_Trending/oc/Octree-GS …...

遥测数据定义的生产级落地规范指南

在分布式架构与微服务体系中&#xff0c;将 Tracing&#xff08;链路&#xff09;、Metrics&#xff08;指标&#xff09;、Logs&#xff08;日志&#xff09;三种遥测数据有机构建为“三位一体” (3D Observability) 的可观测性网络&#xff0c;是保障系统高可用性的基石。 以…...