移动端爬虫学习记录

免责声明

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


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没用。搞的我一直怀疑哪里出错了,查看配置…

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

Kakfa的核心概念-Replica副本(kafka创建topic并指定分区和副本的两种方式) 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柚子校园影院(咨询+解答+辅导)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、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数据分析」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;这也是技术最为难以攻克的课题。针对学生个性化培养的教学资源平台等问题&#…

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

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

UE管理内容 —— FBX Asset Metadata Pipeline

随着实时3D制作大小和复杂程度的增加&#xff0c;以及构成现代制作流程的工具数量的不断增加&#xff0c;增加智能自动化来提高美术效率变得越发重要&#xff1b;这种智能自动化通常主要依靠元数据&#xff1a;有关资源的自定义数据&#xff0c;在项目中为资源赋予意义&#xf…

【Nginx】快速入门

概述 Nginx(engine x)是一个高性能的HTTP和反向代理web服务器。 特点是占有内存小&#xff0c;并发能力强&#xff0c;简单易配置&#xff0c;支持高达 50000 个并发连接数的响应。 作用 代理 正向代理&#xff1a; 反向代理&#xff1a; 负载均衡 Nginx提供的负载均衡策…

8.4 数据库基础技术-SQL

大数据 SQL语言 真题 1

[C语言]一、C语言基础

G:\Cpp\C语言精讲 1. C语言入门 1.1 初识计算机语言 计算机编程语言&#xff0c;就是人与计算机交流的方式。人们可以使用编程语言对计算机下达命令&#xff0c;让计算机完成人们需要的功能。 计算机语言有很多种。如&#xff1a;C 、C、Java、Go、JavaScript、Python&#x…

【Spring】初识Spring MVC

文章目录 前言一、MVC是什么&#xff1f;二、学习Spring MVC建立连接RequestMapping注解注解的使用细节 三、传递参数的情况传递单个参数1.传递String2.传递包装类/基本类型3.参数重命名(RequestParam) 传递多个参数传递对象传递数组传递集合参数为变量传递文件小细节 四、JSON…

【数据结构篇】~二叉树(堆)

【数据结构篇】~二叉树&#xff08;堆&#xff09; 二叉树1.树2.树的组成3.二叉树4.堆1.向上调整算法2.向下调整算法3.堆排序 4.topk问题源码 二叉树 1.树 树的概念与结构​ 树是一种非线性的数据结构&#xff0c;它是由 n&#xff08;n>0&#xff09; 个有限结点组成一个…

Redis管道(Pipeline)

Pipeline是为了解决RTT&#xff0c;仅仅是将命令打包一次性发送&#xff0c;对整个Redis的执行不造成其它任何影响。是批处理命令变种优化措施&#xff0c;类似Redis的原生批命令&#xff08;如mset和mget&#xff09;。 问题由来 Redis是一种基于客户端-服务端模型以及请求/响…

【机器学习】特征工程的基本概念以及LASSO回归和主成分分析优化方法

引言 特征工程是机器学习中的一个关键步骤&#xff0c;它涉及到从原始数据中提取和构造新的特征&#xff0c;以提高模型的性能和预测能力LASSO&#xff08;Least Absolute Shrinkage and Selection Operator&#xff09;回归是一种用于回归分析的线性模型&#xff0c;它通过引入…

leetcode刷题之二分算法

目录 简介 第一个错误的版本 算法思路 代码实现 两个数组的交集 算法思路 代码实现 两个数组的交集2 算法思路 代码实现 有效的完全平方数 算法思路 代码实现 猜数字大小 算法思路 代码实现 排列硬币 算法思路 代码实现 寻找比目标字母大的最小字母 代码实…

Redis系列之事务

概述 Redis事务提供一种将多个命令打包&#xff0c;然后一次性、按顺序地执行的机制&#xff0c;在事务执行的期间不会主动中断&#xff0c;服务器在执行完事务中的所有命令之后&#xff0c;才会继续处理其他客户端的其他命令。 三个重要的保证&#xff1a; 批量操作在发送E…

[Algorithm][贪心][跳跃游戏][加油站][单调递增的数字][坏了的计算器]详细讲解

目录 1.跳跃游戏1.题目链接2.算法思路详解3.代码实现 2.加油站1.题目链接2.算法原理详解3.代码实现 3.单调递增的数字1.题目链接2.算法原理详解3.代码实现 4.坏了的计算器1.代码实现2.算法原理详解3.代码实现 1.跳跃游戏 1.题目链接 跳跃游戏 2.算法思路详解 贪心&#xff1…