移动端爬虫学习记录

免责声明

        本文旨在探讨移动端爬虫技术的应用和挑战,仅供教育和研究用途。请确保在合法合规的框架内使用爬虫技术,遵循相关法律法规和网站的使用条款。作者不对因使用本文内容而产生的任何法律或安全问题承担责任


1、初识移动端爬虫

学习移动端爬虫的原因

①、随机互联网的发展,数据不仅仅只是存在于PC端。移动端的数据在这几年的占比以及势头发展趋势呈现几何倍数的增长。对于做数据分析、用户画像、市场调研来说仅仅参考PC端的数据是远远不够的。

②、部分网站的web端难爬取数据,反而APP的反爬措施更简单,甚至没有反爬。

移动端爬虫的原理

App 中的页面要加载出来,首先需要获取数据,而这些数据一般是通过请求服务器的接口来获取,由于 App 没有浏览器这种可以比较直观地看到后台请求的开发者工具,所以主要用一些抓包技术来抓取数据。


2、移动端工具的安装

概述:既然要学习移动端爬虫,就需要移动端,我们可以采用真实手机或模拟器,由于修改系统可能会导致手机无法正常使用,所以本文所有操作都基于虚拟机进行。

网上有许多虚拟手机软件:夜神模拟器、雷电模拟器、网易MuMu模拟器、逍遥模拟器等等...可以选择的任意一种(推荐野神模拟器,它的模拟器助手可以多开并且创建指定版本的android)。


3、抓包工具的安装与配置

概述:Fiddler是一个http协议调试代理工具,它能够记录并检查所有的电脑和互联网之间的http通讯,设置断点,查看所有的进出Fiddler的数据(cookie,html,js,css等文件),并且Fiddler 要比其他的网络调试器要更加简单,因为它不仅仅暴露http通讯还提供了一个用户友好的格式。

3.1、Fiddler安装

①.首先进入官网下载:Download Fiddler Web Debugging Tool for Free by Telerik

注意:国家一定要选China,其他问题随便。

下载后的界面如下:

②、下载完成后双击打开进行安装;

③、安装时无脑下一步即可(可以更改一下安装位置),安装完成后会跳转到如下界面:


3.2、配置Fiddler

①、安装好后启动Fiddler(可以在开始菜单中找到);

②、打开配置菜单:

③、勾选https并勾选忽略错误:

概述:Fiddler默认只抓取http协议的请求,需要修改配置实现抓取https协议的请求,需要手动勾选Decypt HTTPS traffic,勾选后会有证书安装的窗口弹出,都选择YES

④、勾选允许远程连接:


4、抓包配置

概述:在前面的章节中已经准备好了模拟器和Fiddler抓包工具,但是Fiddler抓包工具并不能抓到模拟器的请求,本章节主要解决Fiddler抓包工具无法抓取模拟器请求的问题及问题解决后出现的安全证书问题。

4.1、获取主机IPv4地址

概述:电脑打开cmd(命令提示符),输入如下命令获取本机的IPV4地址(注意区分,不要拿到虚拟机的地址):

ipconfig

参考图片如下:

为防个人隐私泄露,假设该IPv4地址为192.168.1.2,后面将用该地址举例,大家将其替换成自己的IPv4地址即可。


4.2、验证IPv4地址

概述:验证IPv4地址(要提前打开Fiddler),在浏览器地址栏参考如下地址输入自己的地址:

# 这里的8888就是配置Fiddler是设置的端口号,如果你在配置Fiddler时修改了端口号,需要将端口号替换
# 记得将IP地址替换成自己的IPv4地址
192.168.1.2:8888

打开如下地址就是正确的:


4.3、设置模拟器代理

流程:首先打开夜神模拟器 > 点击工具文件夹 > 点击设置 > 点击WLAN > 长按已连接的WLAN > 点击修改网络 > 点击高级选项右侧的向下箭头 > 点击代理右侧的向下三角 > 点击手动 > 填入主机IPv4的地址和Fiddler设置的端口号 > 点击保存。(具体流程可参考下图)

至此,模拟器代理就设置完成了。


4.4、解决android7.0版本以下的安全警告


概述:当我们进入模拟器的浏览器进入任意https开头的网址都会弹出安全警告,如下图:

在浏览器中的地址栏参考如下地址输入:

# 记得替换成自己的IP地址
192.168.1.2:8888

进入该界面后点击下载证书:

接下来安装证书:

接下来设置密码:

后面还需要确认一下密码,这里就不展示了,设置完成后的界面如下:

但是当我们再次进入浏览器访问百度时任然会有警告信息!

欸!为什么下载了证书还是会弹安全警告?哦,原来我们的模拟器android版本大于7.0了(如下图):

分析:在设置 > 安全 > 信任凭证 > 用户 中我们可以看到刚刚下载的安全证书,对于android7.0版本以下的设备只需要将安全证书放在用户中即可正常访问,但对于android7.0版本以上的用户就需要将证书放在系统中。


4.5、解决android7.0版本以上的安全警告

4.5.1、导出Fiddler证书

流程:打开Fiddler > Tools > Options > HTTPS > Actions > Export Root Certificate to Desktop

注意:导出的证书会自动生成到桌面上。

提示:为了方便后期操作,我将证书移动到了D盘的根目录。


4.5.2、下载openssl

概述:我们刚刚导出的证书移动端是无法识别的,我们需要通过openssl这个工具将导出的证书转换成移动端能识别的证书。

下载地址:Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions (slproweb.com)

提示:需要更具自己电脑的实际情况下载EXE文件,我的电脑是64位的,所以下载了Win64的EXE文件:

双击打开下载好的EXE文件,然后无脑下一步进行安装即可(建议修改一下安装地址,方便后面找到),安装完成后会问你是否要捐款,将√去掉然后点Finish即可。


4.5.3、操作openssl

概述:首先打开openssl的安装地址,我将其安装在了D盘下一个名为OpenSSL-Win64的文件夹中,然后进入该文件夹中一个名为bin的文件夹中,完整路径如下:D:\OpenSSL-Win64\bin,然后在地址栏输入cmd回车即可:

回车后打开了如下命令提示符:

接下来在命令提示符中输入如下命令将Fiddler导出的cer证书转换为pem证书并存放到d盘根目录(Fiddler导出的证书我已经提前放在了D盘根目录):

openssl x509 -inform DER -in d:\FiddlerRoot.cer -out d:\FiddlerRoot.pem

运行后的文件夹内容如下:

在命令提示符中输入如下命令使用md5方式显示pem证书的hash值,然后保存该值用于后面改名:

openssl x509 -inform PEM -subject_hash_old -in d:\FiddlerRoot.pem

然后将刚刚生成到D盘根目录的FiddlerRoot.pem文件改重命名为 hash值.0,例如我改名成了269953fb.0


4.5.4、安装证书到系统目录

①、首先获取访问权限

②、返回桌面并将刚刚改名的269953fb.0文件拖拽到模拟器桌面,拖拽完成后就会自动进入安卓文件夹

 ③、拷贝该文件

④、将证书拷贝到//system/etc/security/cacerts

拷贝后的内容如下:

⑤、虽然已经将证书添加到系统中了,但该证书的权限不足导致无法生效,接下来我们通过MT管理器为该证书修改权限

MT管理器获取:MT管理器_免费高速下载|百度网盘-分享无限制 (baidu.com)

提示1:将下载好的apk文件直接拖拽到模拟器桌面进行安装即可。

接下来打开安装好的MT管理器(所有权限都允许)

提示2:不需要更新(不影响使用,时间久了就不保真了),不需要登录(点击虚拟机空白处或按ESC就可以跳过登录)

运行如下命令:

# 进入存放证书的目录
cd /system/etc/security/cacerts# 切换为root用户
su# 重新挂载系统,使文件具有可读写权限
mount -o rw,remount /system# 修改证书权限
chmod 644 269953fb.0# 重启模拟器

参考截图如下(软件的显示好像有问题,参考上面提供的命令运行即可):

重启模拟器后,打开设置 > 安全 > 信任的凭证 > 系统 中找到名称中带有 FiddlerRoot 的证书,如果能找到就说明我们已经成功的将证书放进了模拟器的系统中,并且能正常使用,如下图:

至此,对于android7.0版本以上系统的请求都能被Fiddler获取且没有安全警告。


5、抓包案例

概述:本章节将通过抓取某小说app的排行数据实现抓包练习。

①、实操前需要进入模拟器桌面的游戏中心下载任意一款小说软件

②、下载完成后进入首页

③、进入Fiddler,清空所有的请求

④、立即点击模拟器中小说首页的排行

⑤、逐个排查每一个响应内容(如果找不到数据可以尝试点击排行中的女生,重新获取新的响应)

⑥、找到响应后获取数据链接

⑦、验证地址的真实性,将获取的地址放在浏览器中去获取,获取的内容如下(更加确信该地址就是排行数据):

⑧、编写爬虫获取指定数据(运行爬虫文件时要关闭Fiddler,否则会没有响应甚至报错)

注意:当运行程序时发现程序运行较慢时,可能时响应被Fiddler劫持了,此时将Fiddler关闭即可。

import requestsdef get_data():url = 'https://b.zhuishushenqi.com/category/rank-recommend?node=recommendfemale&size=100&token=&gender=female&tag=&type=&packageName=com.ushaqi.zhuishushenqi&userid=yk_bc66a5dbbf1cf8895e534'header = {'User-Agent':'Mozilla/5.0 (Linux; Android 7.1.2; SM-G977N Build/LMY48Z; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4515.131 Mobile Safari/537.36'}books = requests.get(url,headers=header)for book in books.json().get('books'):title = book.get('title')author = book.get('author')hot = book.get('bookIndicator')print(f'标题:{title},作者:{author},热度:{hot}')if __name__ == '__main__':get_data()

运行结果如下:

注意:虽然我们的案例中很顺利地获取到了数据,但不是所有的app都会如此,部分app的响应也会做加密处理。

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

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

相关文章

docker映射了端口,宿主机不生效

1、问题产生原因 docker run -d --name my-redis -p 6379:6379 -v /usr/redis.conf:/usr/local/etc/redis/redis.conf team-redis:3.2 redis-server /usr/local/etc/redis/redis.conf 这容器跑起来了,端口6379没用。搞的我一直怀疑哪里出错了,查看配置…

继承与构造函数与析构函数

一 #include<iostream> using namespace std; class father { public:father(){cout << "father无参构造函数" << endl;}father(int x):fa(x){cout << "father单参构造函数" << endl;}~father() {cout << "fath…

【docker compose 部署和 go 热部署工具fresh】

文章目录 docker-compose.yml 文件配置得很全面&#xff0c;以下是一些注释安装 fresh配置 fresh注意事项 docker-compose.yml 文件配置得很全面&#xff0c;以下是一些注释 version: 3 services:# MySQL 服务geekai-mysql:image: registry.cn-shenzhen.aliyuncs.com/geekmast…

计算机视觉(CV)技术的优势和挑战。

计算机视觉&#xff08;CV&#xff09;技术在许多领域中具有广泛的应用&#xff0c;并且具有一些优势和挑战。 优势&#xff1a; 1. 高效性&#xff1a;CV技术能够快速处理大量的图像和视频数据&#xff0c;以实现实时的分析和决策。 2. 自动化&#xff1a;CV技术可以自动化地…

CSS的table显示值:布局艺术的幕后推手

CSS的table显示值&#xff1a;布局艺术的幕后推手 摘要 CSS&#xff08;层叠样式表&#xff09;是构建网页布局的核心技术之一。display: table;是CSS中一个强大的属性&#xff0c;它允许元素表现得像HTML表格一样。本文将深入探讨table显示值如何影响元素的布局&#xff0c;…

C++ QT 单例模式

在 C 中&#xff0c;使用 Qt 框架实现单例模式可以确保一个类只有一个实例&#xff0c;并提供一个全局访问点。以下是一个简单的 C Qt 单例模式实现示例。 1. 饿汉式单例模式 饿汉式单例模式在类加载时就初始化单例对象。 // MySingleton.h #ifndef MYSINGLETON_H #define M…

Kakfa的核心概念-Replica副本(kafka创建topic并指定分区和副本的两种方式)

Kakfa的核心概念-Replica副本&#xff08;kafka创建topic并指定分区和副本的两种方式&#xff09; 1、kafka命令行脚本创建topic并指定分区和副本2、springboot集成kafka创建topic并指定分区和副本2.1、springboot集成kafka2.1.1、springboot集成kafka创建topic并指定5个分区和…

VScode 连接远程服务器

1、 2、 3、免密登录 1、本地生成密钥 ssh-keygen2、生成的密钥默认在 C:\Users\***\.ssh\ 中3、将私钥 C:\Users\***\.ssh\id_rsa 添加到上面的配置文件中的 IdentityFile 项内4、将公钥 C:\Users\***\.ssh\id_rsa\id_rsa.pub 拷贝到远程 ~/.ssh/authorized_keys 中 4、远程…

【精选】基于django柚子校园影院(咨询+解答+辅导)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

Golang | Leetcode Golang题解之第371题两整数之和

题目&#xff1a; 题解&#xff1a; func getSum(a, b int) int {for b ! 0 {carry : uint(a&b) << 1a ^ bb int(carry)}return a }

python | Python集成学习和随机森林算法

本文来源公众号“python”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;Python集成学习和随机森林算法 集成学习是一种通过组合多个模型来提高预测性能的机器学习方法。它通过将多个弱学习器的结果结合起来&#xff0c;形成一个…

音频信号编解码原理及在视频制作中的应用

目录 音频编码与解码概述 常见的音频编码格式 无损与有损编解码器的区别 视频制作中音频编解码器的选择 音频编解码器对延迟和实时传输的影响 结论 音频编码与解码概述 音频编码是指将原始音频数据转换成一种更高效、更紧凑的格式的过程&#xff0c;目的是为了减少存储空…

【算法学习笔记】29:动态规划中可丢弃状态的维度压缩

1 动机 当状态 i i i只依赖于前置状态 i − 1 i - 1 i−1&#xff0c;并且在计算出状态 i i i之后就可以丢弃状态 i − 1 i - 1 i−1时的解时&#xff0c; i − 1 i - 1 i−1就成为一个可丢弃的状态&#xff0c;因此就可以将 i i i这个维度直接压缩&#xff08;省略&#xff0…

「Python数据分析」Pandas进阶,利用concat()函数连接数据(一)

在我们迈向中高级出局数据分析的过程中&#xff0c;数据的合并和连接&#xff0c;是一个非常重要的技能。 现实中&#xff0c;分散在各种数据库&#xff0c;各种数据表格&#xff0c;各种数据存储设备当中的&#xff0c;各式各样的数据&#xff0c;是我们进行数据分析的基础&a…

SmartGit-Git版本控制系统的图形化客户端

SmartGit&#xff1a; SmartGit是一款免费的、专业的Git版本控制系统的图形化客户端。它适用于Windows、Mac和Linux等多种操作系统&#xff0c;提供了直观的用户界面和丰富的功能。支持创建、克隆、推送、拉取、合并和管理Git仓库&#xff0c;以及强大的分支管理功能。还提供了…

(免费领源码)python#Django#msyql学生个性化培养的教学资源平台的设计与实现19385-计算机毕业设计项目选题推荐

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对学生个性化培养的教学资源平台等问题&#…

动态因子模型

动态因子模型(Dynamic Factor Model, DFM)是一种用于分析高维时间序列数据的方法,它能够从多个观测变量中提取出少数几个潜在的共同因子,这些因子解释了观测变量的主要变动。这在经济学、金融学等领域尤其有用,因为它可以简化数据结构,将多个复杂的经济指标整合为少数几个…

Redis(面试篇)

目录 什么是Redis&#xff1f; Redis有哪些优缺点 Redis为什么这么快 Redis有哪些数据类型 Redis的应用场景 持久化 什么是事务&#xff1f; 如何保证缓存与数据库双写时的数据一致性&#xff1f; Redis有哪些功能 什么是缓存穿透&#xff1f;这么解决&#xff1f; …

进制转换计算幸运数出现次数(华为od机考题)

一、题目 1.原题 有位客人来自异国&#xff0c;在该国使用m进制计数。 该客人有个幸运数字n(n<m)&#xff0c;每次购物时&#xff0c; 其总是喜欢计算本次支付的花费(折算为异国的价格后)中存在多少幸运数字。 问&#xff1a;当其购买一个在我国价值k的产品时&#xff0c;…

【jvm】虚拟机栈是如何运行的

目录 1. 说明2. 栈的创建与线程绑定3. 栈帧的结构4. 栈帧的入栈与出栈5. 异常处理 1. 说明 1.虚拟机栈是Java程序运行时环境中的一个重要组成部分&#xff0c;它主要负责存储线程执行方法时的局部变量、操作数栈、动态链接、方法出口等信息。2.JVM虚拟机栈是Java程序运行时环境…