python爬虫之JS逆向——爬虫基础

目录

一、http协议

二、前端三剑客

1 HTML

标签

标签举例

2 CSS

CSS的引入方式

选择器

属性操作

3 JS基础

JS的引入方式

JS的基本语法

变量赋值

数据类型

运算符

分支语句

循环语句

函数

JS的内置方法

字符串的内置方法

数组的内置方法

内置高阶方法

4 JS进阶

JSON序列化

DOM对象

查找标签

操作标签

jQuery

Ajax请求


一、http协议

1.什么是请求头、请求体,响应头、响应体
2.URL地址包括什么
3.get请求和post请求到底是什么
4.Content-Type是什么

答:
1、请求头(Request Headers): 请求头是HTTP请求的一部分,包含了关于请求、响应或者其他的发送信息。
这些信息包括客户端希望从服务器接收什么样的信息,例如请求的URL、HTTP版本、客户端的类型、优先级、认证信息等。
请求头不包含任何的数据,它们只是提供了请求的元数据;
请求体(Request Body): 请求体是HTTP请求中的数据部分,通常用于POST、PUT、PATCH等请求方法,用来发送与请求相关的数据。
请求体的内容取决于请求的类型和目的。
例如,在提交表单时,请求体可能包含了表单字段;在上传文件时,请求体包含了文件数据;
响应头(Response Headers): 响应头是HTTP响应的一部分,包含了关于响应的信息,如内容类型、服务器类型、状态码(例如200表示成功,404表示未找到资源)以及其他与响应相关的元数据。
响应头不包含任何的数据,它们只是提供了响应的元数据;
响应体(Response Body): 响应体是HTTP响应中的数据部分,包含了服务器返回给客户端的资源或数据。
响应体的内容可以是HTML文档、JSON对象、二进制文件等,具体取决于请求的类型和目的。
2、协议 主机 端口 路径 查询字符串 片段标识符
http://example.com:8080/pages/about.html?id=123&name=John#section1
在这个例子中,http 是协议,example.com 是主机,8080 是端口(如果不是默认端口),/pages/about.html 是路径,id=123&name=John 是查询字符串,而#section1 是片段标识符。
3、GET请求:
用途:主要用于请求服务器发送资源或数据。它也可以用来提交数据给服务器,但提交的数据显示在URL中,并且通常用于读取操作。
特点:
数据在URL中可见,安全性较低。
数据量有限制(具体限制取决于浏览器和服务器)。
不适合提交大量数据。
可以在URL中保存较长时间。
POST请求:
用途:通常用于向服务器提交数据,如表单数据。它用于写操作。
特点:
数据不会在URL中暴露,安全性更高。
理论上没有数据量的限制(尽管实际使用中仍受浏览器和服务器限制)。
适合提交大量数据。
通常不能在URL中保存较长时间。
4、content-type是在请求头/响应头中标明请求体中的数据是以何种方式组织的
请求头通常有:json({"key":"value",})/from(key=value&)
响应头通常有:json({"key":"value",})/html(<a>123<\a>)/plain("字符串")/...

二、前端三剑客

1 HTML

标签

HTML:超文本标记语言

块级标签(inline):
1.独占一行
2.可设置长宽

内联标签(inline):
1.不独占一行,按内容占比
2.不可设置长宽

嵌套规则:
1.块级标签可以嵌套块级,也可以嵌套内联
2.内联只能嵌套内联

特殊情况:p标签例外

标签举例

块级标签:
标题1-6:<h1></h1> ... <h6></h6>
段标签:<p></p>
div标签:<div></div>

内联标签:
换行标签:<br>
加粗标签:<b></b> <strong></strong>
倾斜标签:<i></i> <em></em>
span标签:<span></span>

超链接标签:<a href=""></a>
img标签:<img src="" alt="">

列表标签:
无序列表:<ul><li></li></ul>
有序列表:<ol><li></li></ol>
表格标签:<table><tr><th></th></tr><tr><td></td></tr></table>


(重点)from表单标签:
收集客户信息的桥梁!!!
<from>
<input type="">
</from>

2 CSS

CSS:层叠样式表

CSS的功能:渲染和布局

CSS的语法:选择器{属性:值;}

CSS核心:选择标签、操作标签

CSS的引入方式

头部写<style></style>
创建CSS文件,在头部导入<link rel="", href="">

选择器

基本选择器:标签选择器、id选择器 #id值、class选择器 .class值
组合选择器:后代选择器 子代选择器...

属性操作

文本样式: font-...
背景颜色: background
边框: border
内外边距: 内padding 外margin
设置盒子属性: display:inline-block
漂浮: float:left/right

3 JS基础

JavaScript是唯一一个客户端语言,是唯一一个前端编程语言。

这里学习只需要了解这些结构即可,熟悉JS的语法。

JS的引入方式

<script></script>可以写在head里,也可以写在body里,从上往下执行
.js文件导入 <script src=".js"></script>

JS的基本语法

变量赋值

作用:声明一个变量

//局部变量
var x = 10;
let y = 10;
//全局变量
z = 100;
数据类型
var age = 20;  //整型
var pi = 3.14;  //浮点型
var name = "yi";  //字符串
var secondName = 'Hao';  //字符串
var isMarried = false;  //布尔值var dog = ["xiao", 5, "male"]  //这里叫数组,和python列表用法相似dog[0]var info = {"name":"yi", "age":21, "sex":"1"}  //这里叫objec对象,和字典像,但不是字典//引用为info[name]、info.name,有引号也会被去掉
var info = {name:"yi", age:21, sex:"1"}
运算符
运算符内容
数据运算符+   -   *   /   +=
比较运算符>   <   >=   <=   !==   ==   ===
逻辑运算符&&   ||   !

注:比较运算符中,'=='将两者都作为字符串比较,'==='保留原本数据类型进行比较

分支语句

if-else

//if-else
if(){...
}else if(){...
}else{...
}

 switch

//switch
switch(){case 结果1:...breakcase 结果2:...breakdefault:...
}
循环语句

while循环

//while循环
while(){...
}

 for循环

//for循环
for(;;){
}

 与python类似,JS跳出循环也使用以下两个关键字
        break
        continue

函数

声明函数

function fun(){...return
}

调用函数

foo()

匿名函数

(function(x, y){return ...})(1, 2)

JS的内置方法

字符串的内置方法
方法功能
str.length获取长度
str.toUpperCase小写转大写
str.toLowerCase  大写转小写
str.slice(,)切片
str.split()拆分字符串为数组
str.trim()去除左右两端空格
数组的内置方法
方法功能
arr[]索引
arr.slice(,)切片
arr.push()向末尾插入
arr.pop()删除末尾的值
arr.unshift()向首部插入
arr.shift()向首部删除
array.join("")拼接为字符串
内置高阶方法

filter map splice

filter将数组的每一个元素根据fun进行“过滤”, 为true保留, false不保留
arr.filter(fun)  fun可以是匿名函数, fun的参数必须有item, 使用item在函数内部对条件进行限定
还是原来的数组

map将数组的每一个元素根据fun进行“处理”, 为true保留, false不保留
arr.map(fun)  返回一个新的数组

splice方法,对数组删除 插入 替换
arr.splice(start, nums)  从start开始, 删nums个
arr.splice(start, 0, "a", "b", ...)  中间为0就是插入, 从start位置开始插入
arr.splice(start, nums, "a", "b", ...)  从start开始, 删nums个, 然后插入

4 JS进阶

需要记住这些结构是做什么用的即可,为爬虫服务,便于理解网页结构。

JSON序列化

序列化:将某种编程语言支持的的数据类型做一个格式化字符串,从而能够进行存储或网络传输。


反序列化:将能够进行存储或网络传输的某种格式字符串转换成本编程语言能够识别的数据类型对象。

     json: 标准的数据交换格式,支持格式: "" 1  [] {} null bool

python中json包
json.dumps() 序列化
json.loads() 反序列化

JS中
JSON.stringify(obj) 序列化
JSON.parse(str) 反序列化

Python与json对应格式

PythonJS
dictobject
list,tuplearray
strstring
int,floatnumber
Truetrue
Falsefalse
Nonenull

DOM对象

一个标签就是一个DOM

dom.on事件 = function(){}
JS: 选择标签、操作标签

查找标签

直接查找标签
document.getElementsByTagName("标签名")
document.getElementById("id值")
document.getElementsByClassName("类名")

导航查找标签
elementNode.xxx

CSS选择器查找
document.querySelector("css选择器")  获取第一个,返回dom对象
document.querySelectorAll("css选择器")  获取所有,返回数组

操作标签

文本操作
console.log(this.innerHTML)  查看文本值
this.innerHTML = 123  设置文本值

value操作
input、select和textarea标签
this.value

CSS样式操作
this.style.color = "red"  改变样式

jQuery

类似于JS的第三方库,还有vue等
在某些方面替换JS,更加好用

Ajax请求

异步js传输数据技术
本质上就是局部刷新

向服务器发请求的方式

同步页面刷新:
地址栏请求get
a标签get
from表单get/post

异步页面刷新:
ajax请求

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

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

相关文章

研学活动报名二维码怎么制作?

在组织研学活动时&#xff0c;老师们经常面临报名流程繁琐、信息收集不全面、统计工作耗时等问题&#xff1f;如何高效地管理学生的报名信息&#xff0c;确保活动顺利进行呢&#xff1f; 现在我们有了更多的选择。老师们可以快速制作出研学活动的研学活动报名二维码怎么制作&am…

【网络协议Http】Http中get,post,put,delete区别

Http协议 超文本传输协议&#xff08;Hypertext Transfer Protocol&#xff0c;HTTP&#xff09;是一个简单的请求-响应协议&#xff0c;它通常运行在TCP之上。 【参考】 GET && POST 对比 关于tcp数据包&#xff1a;对于GET方式的请求&#xff0c;浏览器会把http hea…

Android 11 AudioPolicyService 启动流程

AudioPolicyService在init进程中启动&#xff0c;源码路径&#xff1a;frameworks/av/media/audioserver/audioserver.rc service audioserver /system/bin/audioserverclass coreuser audioserver# media gid needed for /dev/fm (radio) and for /data/misc/media (tee)grou…

DETR整体模型结构解析

DETR流程 Backbone用卷积神经网络抽特征。最后通过一层1*1卷积转化到d_model维度fm&#xff08;B,d_model,HW&#xff09;。 position embedding建立跟fm维度相同的位置编码(B&#xff0c;d_model,HW&#xff09;。 Transformer Encoder,V为fm&#xff0c;K&#xff0c;Q为fm…

非量表题如何进行信效度分析

效度是指设计的题确实在测量某个东西&#xff0c;一般问卷中使用到。如果是量表类的数据&#xff0c;其一般是用因子分析这种方法去验证效度水平&#xff0c;其可通过因子分析探究各测量量表的内部结构情况&#xff0c;分析因子分析得到的内部结构与自己预期的内部结构进行对比…

自学之路Flutter使用Provider进行状态管理

使用前的准备 首先在pubspec.yaml中配置&#xff0c;然后pub get,等待安装完成 我们首先创建两个比较简单的控制器&#xff0c;测试页面跳转之间的数据传递。 import package:flutter/material.dart;void main() {runApp(const MyApp()); }class MyApp extends StatelessWid…

python接口自动化之会话保持

&#x1f366; 会话保持-token 有的网站登录需要token鉴权&#xff0c;是啥意思呢&#xff0c;现在有两个接口&#xff0c;一个接口是登录&#xff0c;一个接口是提交订单&#xff0c;那你怎么保证&#xff0c;提交登录这个用户是登录状态呢。登录成功的接接口会在response里面…

大模型预训练结果到底是什么?

近日参加一个线下 AI 交流会议&#xff0c;会上有个非本行业的老师提问&#xff1a;“大家说的训练好的大模型到底是什么&#xff1f;是像 Word 软件一样可以直接使用的程序吗&#xff1f;” 这个问题看似简单&#xff0c;却一下把我问住了。的确&#xff0c;我们这些身处 AI 领…

Kafka原生API使用Java代码-生产者-发送消息

文章目录 1、生产者发送消息1.1、使用EFAK创建主题my_topic31.2、根据kafka官网文档写代码1.3、pom.xml1.4、KafkaProducer1.java1.5、使用EFAK查看主题1.6、再次运行KafkaProducer1.java1.7、再次使用EFAK查看主题 1、生产者发送消息 1.1、使用EFAK创建主题my_topic3 1.2、根…

STM32 OTA需要注意问题

一、OTA设计思路&#xff08;问题&#xff09; 1、根据stm32f405 flash分布&#xff0c;最初将flash划分为四个区域&#xff0c;分别是Bootloader、APP1、APP2、参数区&#xff0c;设备上电后&#xff0c;进入Bootloader程序&#xff0c;判断OTA参数&#xff0c;根据参数来确定…

APP逆向之调试的开启

很基础的一个功能设置&#xff0c;大佬轻喷。 背景 在开始进行对APP逆向分析的时候&#xff0c;需要对APP打开调试模式。 打开调试的模式有多种方式可以通过直接改包方式也可以通过借助第三方工具进行打开调试模式。 下面就整理下这个打开调试模式的一些方式。 改包修改模…

Java面试题分享-敏感词替换 java 版本

入职啦最近更新了一些后端笔试、面试题目&#xff0c;大家看看能快速实现吗&#xff1f; 关注 入职啦 微信公众号&#xff0c;每日更新有用的知识&#xff0c;Python&#xff0c;Java&#xff0c;Golang&#xff0c;Rust&#xff0c;javascript 等语言都有 不要再用replaceAll做…

npm获取yarn在安装依赖时 git://github.com/user/xx.git 无法访问解决方法 -- 使用 insteadOf设置git命令别名

今天在使用一个node项目时突然遇到 一个github的拉取异常&#xff0c;一看协议居然是git://xxx 貌似github早就不用这种格式了&#xff0c; 而是使用的gitgithub.com:xxx 这种或者https协议&#xff0c;解决方法&#xff1a; 使用insteadof设置git别名 url.<base>.inste…

DNF手游攻略:开荒必备攻略!

DNF手游马上就要开服了&#xff0c;今天给大家带来最完整的DNF手游入门教程。这篇攻略主要讲述了 DNF手游开服第一天要注意的事项&#xff0c;这是一个新手必备的技能书&#xff0c;可以让你在开服的时候&#xff0c;少走一些弯路&#xff0c;让你更快完成任务&#xff01;废话…

蓝牙Mesh模块多跳大数据量高带宽传输数据方法

随着物联网技术的飞速发展&#xff0c;越来越多的设备需要实现互联互通。蓝牙Mesh网络作为一种低功耗、高覆盖、易于部署的无线通信技术&#xff0c;已经成为物联网领域中的关键技术之一。在蓝牙Mesh网络中&#xff0c;节点之间可以通过多个跳数进行通信&#xff0c;从而实现大…

mysql-日志管理-error.log

日志管理 默认的数据库日志 vim /etc/my.cnf //错误日志 log-error/usr/local/mysql/mysql.log查看数据库日志 tail -f /usr/local/mysql/mysql.log1 错误日志 &#xff1a;启动&#xff0c;停止&#xff0c;关闭失败报错。rpm安装日志位置 /var/log/mysqld.log #默认开启 2 …

【OrangePi AIpro】香橙派 AIpro 为AI而生

产品简介 OrangePi AIpro(8T)&#xff1a;定义边缘智能新纪元的全能开发板 在当今人工智能与物联网技术融合发展的浪潮中&#xff0c;OrangePi AIpro(8T)凭借其强大的硬件配置与全面的接口设计&#xff0c;正逐步成为开发者手中的创新利器。这款开发板不仅代表了香橙派与华为…

最新淘宝死店全自动采集私信筛选脚本,号称日赚500+【采集软件+使用教程】

原理&#xff1a; 利用脚本自动采集长时间未登录店铺&#xff0c;然后脚本自动私信对应的店铺&#xff0c;看看商家是不是不回消息来判断是否是死店&#xff0c;再下单购买死店的产品&#xff0c;超过48小时不发货就可以联系客服获得赔付&#xff0c;一单利润百分之5%-30%&…

配置阿里yum源

配置阿里yum源&#xff08;这个很重要&#xff09;&#xff1a;https://developer.aliyun.com/article/1480470 1.备份系统自带yum源配置文件 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup2.下载ailiyun的yum源配置文件 2.1 CentOS7 wge…

SRS、ZLMediakit音视频流媒体服务器

SRS、ZLMediakit都是做为webrtc的SFU&#xff08;selective forward unit&#xff09; WebRTC 开发实践&#xff1a;为什么你需要 SFU 服务器 https://mp.weixin.qq.com/s?__bizMzAxNTc1MjM0Mw&mid2652213442&idx1&sn33f0393a2dbc2b6a39c613bb238ec145&chksm…