JS逆向
JS逆向 浏览器调试工具介绍 元素界面,用于展示当前网页信息(但是注意这个不是静态资源) 控制台界面,用于调试打印信息的(类比cmd) 源代码/来源界面,存放了js代码、图片、css、html等静态资源文件 网络界面,用于网络请求的监听(非抓包,抓包是可以对其中内容作修改的) Fetch/XHR:动态数据 文档:静态数据 tips 在网页中找到对应的接口,注意区分动态与静态接口 动态接口返回的是结构化数据(通过后端返回的),静态接口返回的是非结构化数据(HTML、CSS、JS) 查看返回的数据大小,来排除一些返回数据过小的接口(如果你想要的数据是很大的数据的话) 快速生成爬虫代码,工具网站 复制接口的crul代码(bash格式) 复制到网站后,直接生成代码: 如果发现浏览器返回数据是这种带有大括号的,直接在接受后,使用.json()进行转换 网络->选中接口->启动器 确定JS是否存在混淆或加密(eval) 若无,则定位加密位置或者解密
爬虫之Scrapy框架使用
爬虫之Scrapy框架使用 安装 1pip install scrapy quick_start 使用scrapy startproject 项目名称创建scrapy项目 项目组成 创建爬虫文件 cd 目录名称/目录名称/spiders跳转到spiders文件夹 scrapy genspider 爬虫名字 网页的域名,网页域名不用加协议 运行爬虫文件(在spiders目录下执行)scrapy crawl 爬虫名称
Python爬虫基础
Python爬虫基础 爬虫,就是通过一个程序,根据url进行爬取网页,获取有用信息。 爬虫的核心在于: 根据需求,确定要爬取的url 模拟浏览器进行访问,获取到返回的HTML源码 对该HTML进行解析,获取需要的数据 爬虫的难点在于——如何应对反爬手段。 本文聚焦与两方面内容: 一些基本爬虫工具库的使用(urllib、xpath、jsonpath、bs4、request) 进行爬虫过程中遇到的一些问题以及解决方案 urllib 官方文档:其中urllib.request库用于打开和读取URL、urllib.parse用于解析URL,此两库常用。 urllib 菜鸟教程:简单使用、查常用的API [ ] 补充一些使用demo,放github仓库 XPath 官方文档 lxml.etree库-博客园:API XPath 菜鸟教程:重点关注XPath语法 [ ] 补充一些使用demo,放github仓库 jsonpath 官方文档 [ ] 补充一些使用demo,放github仓库 bs4 官方文档 [ ]...
马踏棋盘问题
马踏棋盘/骑士周游问题 DFS算法的应用 思路分析 骑士周游问题的解决步骤和思路: 创建棋盘 初始化一个棋盘 chessBoard,它是一个二维数组,最终会显示出棋盘被访问的顺序(从1开始计数),也作为标记某个点是否被访问过使用(0则表示未访问过)。 设置当前位置已访问 将骑士的当前位置标记为已访问,并根据当前位置计算骑士能够跳到的合法位置。将这些位置存放在一个集合(如 ArrayList)中,最多包含8个合法的跳跃位置。每走一步,将步数 step 加 1(step从1开始)。 遍历可能的跳跃位置 遍历 ArrayList 中存放的所有跳跃位置,检查哪个位置可以合法地走通。如果找到可以继续走的合法位置,则继续往下走;如果走不通,进行回溯,尝试其他可能的路径。 判断是否完成任务 在每一步后,通过比较当前步数 step 和应走的总步数(例如,棋盘上总共有 64 格)来判断骑士是否完成了任务。如果步数未达到目标,表示任务尚未完成,需要将当前走的这步回溯(标记为未访问 +...
Floyd算法
Floyd算法 Floyd算法介绍 和Dijkstra算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名 弗洛伊德算法(Floyd)计算图中各个顶点之间的最短路径 迪杰斯特拉算法用于计算图中某一个顶点到其他顶点的最短路径 弗洛伊德算法 VS 迪杰斯特拉算法:迪杰斯特拉算法通过选定的被访问顶点,求出从出发访问顶点到其他顶点的最短路径;弗洛伊德算法中每一个顶点都是出发访问点,所以需要将每一个顶点看做被访问顶点,求出从每一个顶点到其他顶点的最短路径。 弗洛伊德算法思路: 假设图中有顶点 $ v_i $、$ v_j$ 和 $ v_k $,其中 $ L_{ik} $表示从顶点 $v_i $到顶点 $ v_k $ 的最短路径,$ L_{kj} $ 表示从顶点 $ v_k $ 到顶点 $ v_j $ 的最短路径。那么,顶点 $ v_i $ 到顶点 $ v_j $ 的最短路径 $ L_{ij} $ 可以通过以下方式计算: $$ L_{ij} =...
Dijkstra算法
迪杰斯特拉算法 算法介绍 Dijkstra 算法 是经典的 最短路径算法,用于计算从一个源顶点到图中其他所有顶点的最短路径。它的核心思想是从起始顶点开始,逐步“扩展”到其他顶点,每次选择距离起始顶点最近的未处理顶点,从而逐步找到最短路径。Dijkstra 算法本质上是基于 贪心算法 的思想,优先选择当前最短的路径。 算法过程 初始化 假设我们以顶点 $v$ 作为起始点,图中的顶点集合为 $V = { v_1, v_2, \cdots, v_n }$。 初始化一个距离集合 $Dis = { d_1, d_2, \cdots, d_n}$,其中 $d_i$ 表示从起点 $v$ 到顶点 $v_i$ 的当前最短距离。 对于起点 $v$,距离为 0,即 $d_v = 0$; 对于其他顶点,初始距离设置为无穷大(表示还未找到路径)。 初始时,所有顶点都没有被访问过,所有的距离值都存储在集合 $Dis$ 中。 选择当前最短的顶点 从距离集合 $Dis$ 中选择当前距离最小的顶点 $v_i$,并将其从 $Dis$ 集合中移除。 此时,$v$ 到 $v_i$...
Kruskal算法
和Prim算法一样,也是求最小生成树的,先补并查集部分知识,对于Kruskal算法的“判断该节点属于哪一类”可以有更深刻的理解。
Prim算法
两点之间……线段最短……hh
集合覆盖问题
贪心-集合覆盖(简单例子) 例子很简单,主要是了解这种思想–贪心算法[^11] 题目: 假设存在如下表的需要付费的广播台,以及广播台信号可以覆盖的地区。 如何选择最少的广播台,让所有的地区都可以接收到信号 广播台 覆盖地区 K1 “北京”, “上海”, “天津” K2 “广州”, “北京”, “深圳” K3 “成都”, “上海”, “杭州” K4 “上海”, “天津” K5 “杭州”, “大连” 步骤: 遍历所有的广播电台, 找到一个覆盖了最多未覆盖的地区的电台(此电台可能包含一些已覆盖的地区,但没有关系) 将这个电台加入到一个集合中(比如ArrayList),...
KMP算法
KMP算法 暴力匹配法(bad) 假设现在str1匹配到 i 位置,子串str2匹配到 j 位置,则有: 如果当前字符匹配成功(即str1[i] == str2[j]),则i++,j++,继续匹配下一个字符 如果失配(即str1[i]! = str2[j]),令i = i - (j - 1),j = 0。相当于每次匹配失败时,i 回溯,j 被置为0。 用暴力方法解决的话就会有大量的回溯,每次只移动一位,若是不匹配,移动到下一位接着判断,浪费了大量的时间。 暴力匹配代码实现 ViolenceMatch 1234567891011121314151617181920212223242526272829303132333435363738package com.yukinoshita.algorithm.kmp;public class ViolenceMatch { public static void main(String[] args) { String s1 =...










