1. 请求头中最常见的一些重要内容
 
- User-Agent : 请求载体的身份标识(⽤啥发送的请求)
 - Referer: 防盗链(这次请求是从哪个⻚⾯来的? 反爬会⽤到)
 - cookie: 本地字符串数据信息(⽤户登录信息, 反爬的token)
 
 
2. 响应头中一些重要内容
 
- cookie: 本地字符串数据信息(⽤户登录信息, 反爬的token)
 - 各种神奇的莫名其妙的字符串(这个需要经验了, ⼀般都是token
 字样, 防⽌各种攻击和反爬) 
 
数据解析的四种方式
 
- re解析
 - bs4解析(beautifulsoup)
 - xpath解析
 - pyquery解析
 这四种方式可以混合使用,完全以结果做导向,只要能拿到想要的数据。 
 
正则表达式
 
- 元字符:具有固定含义的特殊符号,常用元字符 
- . 匹配除换⾏符以外的任意字符, 未来在python的re模块
 中是⼀个坑. - \w 匹配字⺟或数字或下划线
 - \s 匹配任意的空⽩符
 \d 匹配数字 - \n 匹配⼀个换⾏符
 - \t 匹配⼀个制表符
 - ^ 匹配字符串的开始
 - $ 匹配字符串的结尾
 - \W 匹配⾮字⺟或数字或下划线
 - \D 匹配⾮数字
 - \S 匹配⾮空⽩符
 - a|b 匹配字符a或字符b
 - () 匹配括号内的表达式,也表示⼀个组
 - […] 匹配字符组中的字符
 - [^…] 匹配除了字符组中字符的所有字符
 
  - 量词:控制前面的元字符出现的次数 
- 重复零次或更多次
 -   
 - ? 重复零次或⼀次
 - {n} 重复n次
 - {n,} 重复n次或更多次
 - {n,m} 重复n到m次
 
  - 贪婪匹配和惰性匹配 
- .* 贪婪匹配, 尽可能多的去匹配结果
 - .*? 惰性匹配, 尽可能少的去匹配结果 -> 回溯
 这两个要着重的说⼀下. 因为我们写爬⾍⽤的最多的就是这个惰性匹
 配. 
  
 
正则预加载
 
- 提前编写好正则对象
 
 
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逆向四个阶段
 
- 快速了解app逆向到底干的什么
 - java基础
 - 安卓开发
 - 逆向+案例
 
 
安卓设备
 
- 真机
 - 模拟器
 
 
# win: 逍遥、夜神、雷电、网易mumu
# max: 网页mum
win安装时需要开启vt。
 
- 安装网页mumu模拟器后,先开启root权限