爬虫入门01

1. 请求头中最常见的一些重要内容

  1. User-Agent : 请求载体的身份标识(⽤啥发送的请求)
  2. Referer: 防盗链(这次请求是从哪个⻚⾯来的? 反爬会⽤到)
  3. cookie: 本地字符串数据信息(⽤户登录信息, 反爬的token)

2. 响应头中一些重要内容

  1. cookie: 本地字符串数据信息(⽤户登录信息, 反爬的token)
  2. 各种神奇的莫名其妙的字符串(这个需要经验了, ⼀般都是token
    字样, 防⽌各种攻击和反爬)

数据解析的四种方式

  1. re解析
  2. bs4解析(beautifulsoup)
  3. xpath解析
  4. pyquery解析
    这四种方式可以混合使用,完全以结果做导向,只要能拿到想要的数据。

正则表达式

  1. 元字符:具有固定含义的特殊符号,常用元字符
    • . 匹配除换⾏符以外的任意字符, 未来在python的re模块
      中是⼀个坑.
    • \w 匹配字⺟或数字或下划线
    • \s 匹配任意的空⽩符
      \d 匹配数字
    • \n 匹配⼀个换⾏符
    • \t 匹配⼀个制表符
    • ^ 匹配字符串的开始
    • $ 匹配字符串的结尾
    • \W 匹配⾮字⺟或数字或下划线
    • \D 匹配⾮数字
    • \S 匹配⾮空⽩符
    • a|b 匹配字符a或字符b
    • () 匹配括号内的表达式,也表示⼀个组
    • […] 匹配字符组中的字符
    • [^…] 匹配除了字符组中字符的所有字符
  2. 量词:控制前面的元字符出现的次数
    • 重复零次或更多次
      • 重复⼀次或更多次
    • ? 重复零次或⼀次
    • {n} 重复n次
    • {n,} 重复n次或更多次
    • {n,m} 重复n到m次
  3. 贪婪匹配和惰性匹配
    • .* 贪婪匹配, 尽可能多的去匹配结果
    • .*? 惰性匹配, 尽可能少的去匹配结果 -> 回溯
      这两个要着重的说⼀下. 因为我们写爬⾍⽤的最多的就是这个惰性匹
      配.

正则预加载

  1. 提前编写好正则对象
import re# 提前把正则对象加载完毕
obj = re.compile(r"\d+")
# 直接把加载好的正则进行使用
ret = obj.finditer("abc123def456qqq789")
for item in ret:print(item.group())

分组提取数据

# 分组提取
a = """
<div class='⻄游记'><span id='10010'>中国联通</span></div>
<div class='⻄游记'><span id='10086'>中国移动</span></div>
"""
obj = re.compile(r"<span id='(?P<id>\d+)'>(?P<name>.*?)</span>")
ret = obj.finditer(a)
for item in ret:print(item.group("id"), item.group("name"))

python中如何让"."匹配换行符、re.S

obj = re.compile(r'<div class="item">.*?<span class="title">(?P<name>.*?)</span>', re.S)

app逆向四个阶段

  1. 快速了解app逆向到底干的什么
  2. java基础
  3. 安卓开发
  4. 逆向+案例

安卓设备

  1. 真机
  2. 模拟器
# win: 逍遥、夜神、雷电、网易mumu
# max: 网页mum
win安装时需要开启vt。
  1. 安装网页mumu模拟器后,先开启root权限

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

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

相关文章

Vue开发之父子组件

创建父子组建&#xff0c;分三步。一是创建文件&#xff0c;二是引入组建&#xff0c;三是组件间通信。在components目录下新建sub文件夹&#xff0c;用于存放一下可以复用的子组件。比如新建一个SubCon.vue组件 <template><div class"first-app">{{ ms…

【leetcode刷题之路】剑指Offer(4)——分治+排序算法+动态规划

文章目录 8 分治算法8.1 【递归】剑指 Offer 07 - 重建二叉树8.2 【递归】【快速幂】剑指 Offer 16 - 数值的整数次方8.3 【递归】剑指 Offer 33 - 二叉搜索树的后序遍历序列8.4 【递归】【分治】剑指 Offer 17 - 打印从1到最大的n位数8.5 【归并排序】【分治】剑指 Offer 51 -…

[论文阅读笔记25]A Comprehensive Survey on Graph Neural Networks

这是一篇GNN的综述, 发表于2021年的TNNLS. 这篇博客旨在对GNN的基本概念做一些记录. 论文地址: 论文 1. 引言, 背景与定义 对于图像数据来说, CNN具有平移不变性和局部连接性, 因此可以在欧氏空间上良好地学习. 然而, 对于具有图结构的数据(例如社交网络 化学分子等)就需要用…

Qt5升级到Qt6分步迁移教程

Qt框架的一个新的长期支持版本6.5最近发布。它为以前的版本引入了许多修复、改进和新功能。有些可能对您的应用程序有用&#xff08;如果不是现在&#xff0c;可能会在将来&#xff09;&#xff0c;因此最好将应用程序迁移到最新版本的框架。 仍然有许多应用程序仍在使用Qt 5&…

SpringDataRedis 使用

1. SpringDataRedis 特点2. 使用 SpringDataRedis 步骤3. 自定义 RedisTemplate 序列化4. SpringDataRedis 操作对象 1. SpringDataRedis 特点 提供了对不同 Redis 客户端的整合&#xff08;Lettuce 和 Jedis&#xff09;提供了 RedisTemplate 统一 API 来操作 Redis支持 Redi…

C++ 改善程序的具体做法 学习笔记

1、尽量用const enum inline替换#define 因为#define是做预处理操作&#xff0c;编译器从未看见该常量&#xff0c;编译器刚开始编译&#xff0c;它就被预处理器移走了&#xff0c;而#define的本质就是做替换&#xff0c;它可能从来未进入记号表 解决方法是用常量替换宏 语言…

安装VS2005时提示:请插入磁盘:visual studio 2005 DVD

安装VS2005时提示&#xff1a;请插入磁盘:visual studio 2005 DVD 修改卷标为 "DVD1"

Spring Cache的介绍以及怎么使用(redis)

Spring Cache 文章目录 Spring Cache1、Spring Cache介绍2、Spring Cache常用注解2.1、EnableCaching注解2.2、CachePut注解2.3、CacheEvict注解2.4、Cacheable注解 3、Spring Cache使用方式--redis 1、Spring Cache介绍 Spring Cache是一个框架&#xff0c;实现了基于注解的缓…

C++--动态规划背包问题(1)

1. 【模板】01背包_牛客题霸_牛客网 你有一个背包&#xff0c;最多能容纳的体积是V。 现在有n个物品&#xff0c;第i个物品的体积为vivi​ ,价值为wiwi​。 &#xff08;1&#xff09;求这个背包至多能装多大价值的物品&#xff1f; &#xff08;2&#xff09;若背包恰好装满&a…

【数据结构】排序(插入、选择、交换、归并) -- 详解

一、排序的概念及其运用 1、排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记…

pytorch 基于masking对元素进行替换

描述 pytorch 基于masking对元素进行替换. 代码如下. 先展平再赋值. 代码 # map.shape [64,60,128] # infill.shape [64,17,128] # mask_indices.shape [64,60]map map.reshape(map.shape[0] * map.shape[1],map.shape[2]) [mask_indices.reshape(mask_indices.shape[0]*ma…

文件属性与目录

目录 Linux 系统中的文件类型普通文件目录文件字符设备文件和块设备文件符号链接文件管道文件套接字文件总结 stat 函数struct stat 结构体st_mode 变量struct timespec 结构体练习 fstat 和lstat 函数fstat 函数lstat 函数 文件属主有效用户ID 和有效组IDchown 函数fchown 和l…

K8s 在创建pod时api-server是先找scheduler 还是controller-manager

在K8s中&#xff0c;创建Pod时的流程如下&#xff1a; 用户通过Kubectl或其他方式向API Server发送创建Pod的请求。API Server接收到请求后&#xff0c;会先进行权限验证和身份认证。一旦验证通过&#xff0c;API Server会将请求转发给Scheduler组件。Scheduler负责对新创建的…

leetcode 567. 字符串的排列(滑动窗口-java)

滑动窗口 字符串的排列滑动窗口代码演示进阶优化版 上期经典 字符串的排列 难度 -中等 leetcode567. 字符串的排列 给你两个字符串 s1 和 s2 &#xff0c;写一个函数来判断 s2 是否包含 s1 的排列。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 换句…

Oracle监听器启动出错:本地计算机上的OracleOraDb11g_home1TNSListener服务启动后又停止了解决方案

在启动oracle的服务OracleOraDb11g_home1TNSListener时&#xff0c;提示服务启动后又停止了。 解决方法&#xff1a; 修改oracle安装目录下的两个配置文件&#xff1a; 以上两个文件&#xff0c;对应的HOST的值&#xff0c;都改为127.0.0.1 然后再启动服务&#xff0c;启动成…

【Python】Python 常量定义

Python 常量定义 Python中存在常量吗&#xff1f;相信很多人的答案是否定的。 实际上Pythrni的内建命名空间是 支持一小部分常量的&#xff0c; 如我们熟悉的True、False、None等&#xff0c;只是Python没有提供定义常量 的直接方式而已。 那么&#xff0c;在Python中应该如何…

大集合拆分成多个小集合

文章目录 1. 场景2. 拆分集合方法&#xff08;写了三种&#xff09;3. 格式化打印方法 1. 场景 在数据库批量操作时&#xff0c;有可能数据量过大&#xff0c;不能一次性操作&#xff0c;所以需要将大集合拆分为多个小集合进行多次操作 2. 拆分集合方法&#xff08;写了三种&…

Linux通过libudev获取挂载路径、监控U盘热拔插事件、U盘文件系统类型

文章目录 获取挂载路径监控U盘热拔插事件libusb 文件系统类型通过挂载点获取挂载路径添libudev加库 获取挂载路径 #include <stdio.h> #include <libudev.h> #include <string.h>int main() {struct udev *udev;struct udev_enumerate *enumerate;struct ud…

Android Activity启动过程一:从Intent到Activity创建

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、人工智能等&#xff0c;希望大家多多支持。 目录 一、概览二、应用内启动源码流程 (startActivity)2.1 startActivit…

curl通过webdav操作alist

创建目录: url202320230828;curl -v -u "admin":"这里是密码" -X MKCOL "http://127.0.0.1:5244/dav/my189tianyi/${url2023}/" 上传文件: curl -v -u "admin":"这里是密码" -T /tmp/aa.json "http://127.0.0.1:52…