最近在研究小红书数据抓取
开始搜索引擎推荐的可行的方案:
https://github.com/NanmiCoder/MediaCrawler
试了下,是可行的,基于PC版的小红书的数据抓取,我的场景是关键字抓取,PC版本的小红书每次抓取的数据限制220条,而且经过一些尝试发现PC版本的小红书在多次抓取过后会出现验证码的情况,自动化的话应该是没法玩。
考虑真机场景,开始参考了资料:
https://www.cnblogs.com/guowenrui/p/16990067.html
https://blog.csdn.net/hekaiyou/article/details/131501524
https://www.cnblogs.com/crstyl/p/14690895.html
https://www.youtube.com/watch?v=hKHHGZq82Bk
准备基于IOS平台的数据采集,在经过两天的尝试之后发现太坑了,各种问题。。。
最后转战安卓平台,感觉成功率应该会高点。
iOS平台可能就是基于mac系统,然后要装xcode之类的,我感觉快搞成了,最后还是没搞成。
安卓平台的话我应该是搞成了,记录比较坑的地方吧。。
环境准备
我基于的是win10的系统,
首先是找了个安卓手机,连到电脑上,然后捣鼓了半天,手机都是显示充电中。。电脑上看不到手机,好奇怪。。换了好几个线都是这样,先不管了, 然后就是装个安卓的开发者工具,
下载地址:https://developer.android.com/studio
要下载个 android-studio windows版本的。
下载好安装完成之后会提示你要下载安卓的sdk,下一步进行安装就行了,(这里比较坑!!) 他这个sdk下载时连google的,所以你的网络要准备好,我这边时准备好的,但是他这个下载界面是设计的有点问题的, 明明在下载了,但是界面上面看不出来,好像卡住样的,导致我试了很多次,都感觉下载不了(其实已经在下载了)。 最后我去看任务管理器,发现有网络流量,才知道在下载,sdk有1个多G,要下载一会。
sdk下载好之后,我们打开Android studio, 主界面下面有个more actions,点开有个 sdk manager ,点开可以看到刚才安装的sdk的位置:android sdk location:C:\Users\xiaocaicai\AppData\Local\Android\Sdk
我们帮这个路径复制下来,新增一个系统的环境变量:ANDROID_SDK_ROOT 后面的值就填这个路径
然后我们在sdk下面可以看到个目录 platform-tools ,我们用里面的 adb.exe工具 看下手机啥情况:
adb.exe devices
正常应该能看到个设备,结果啥都没有。。
最后发现是数据线有问题,找了个好的数据线能看到设备了。
然后安装设备,系统设置里面找到开发者选项,开启开发者选项
我们要开启下面这些东西:
usb调试模式 - 开启
默认usb模式 - MTP
usb安装 - 开启
usb调试(安全设置) - 开启
我手机(小米)开始时没插sim卡,发现开启上面某些功能的时候提示没有sim卡无法开启。解决办法很简单,查个sim卡开启功能,再帮sim卡拔了。。
好了,再插上手机,手机上可能有个授权,点同意,然后再adb devices 就能看到我们的设备了。
然后下载我们要用到的工具:
https://github.com/appium/appium-desktop
https://github.com/appium/appium-inspector
去这两个项目的releases页面下载最新的windows的exe程序,下载下来安装。
然后我们还需要装个java的jdk,我电脑上面本来就有,就不用装了,我用的时jdk1.8版本,然后需要配置环境变量 JAVA_HOME 到我的jdk位置:C:\Program Files\Java\jdk-1.8
apium-desktop下载好安装好之后,直接启动就行了。
host:0.0.0.0
port:4723
点击 startServer 就行了
然后我们启动:appium-inspector
然后我们remote host就默认:127.0.0.1就好了,port也是默认。
下面一个比较坑的来了 他这个remote path 默认是 /,结果我后面参考人家的配置半天都不行,点啥都是404… 然后网上找半天:
https://github.com/appium/appium-inspector/issues/162
看到这个issues,需要帮remote path改成:/wd/hub
简直无语。。
然后启动的时候可能有乱七八糟的错误,在 apium-desktop的控制台能看到错误,仔细去看错误日志,然后猜测或者去搜索引擎搜索。。
参考资料:https://github.com/appium/appium/issues/13802
发现是 手机的安全策略没配置好
然后就是 appium-inspector 的配置问题:
{
"platformName": "Android",
"appium:deviceName": "486196000152a",
"appium:appPackage": "com.xingin.xhs",
"appium:noReset": true,
"appium:fullReset": false,
"appium:appActivity": ".index.v2.IndexActivityV2"
}
我最后用这个配置跑起来了,
这里有几个说明的:
appium:deviceName 这个是你用adb.exe devices打印出来的设备,里面有个设备id,就用这个
然后 关于 appium:appPackage和 .index.v2.IndexActivityV2 如果你填写的不对,可能他控制台就报 无法启动 app各种乱七八糟的错误,然后这个玩意我看人家填写的五花八门,感觉小红书可能会随着版本修改,特别是 appium:appActivity ,所以要学会怎么去找这个玩意。
我是借鉴了:https://www.automationtestinghub.com/apppackage-and-appactivity-name/的思路
我们帮手机连好,然后在手机上打开小红书首页,然后 命令执行:adb.exe shell
然后打开一个adb的shell,在shell里面执行:dumpsys window displays,
然后我们能看到一堆输出:
Dump time : 2024-06-15 11:15:48.720
WINDOW MANAGER DISPLAY CONTENTS (dumpsys window displays)
Display: mDisplayId=0
init=720x1440 320dpi cur=720x1440 app=720x1344 rng=720x672-1344x1296
deferred=false mLayoutNeeded=true mTouchExcludeRegion=SkRegion((0,0,720,1440))
mFreeFormWindowShowed=false
mLayoutSeq=2031
Application tokens in top down Z order:
mStackId=17
mDeferRemoval=false
mBounds=[0,0][720,1440]
taskId=256
mBounds=[0,0][720,1440]
mdr=false
appTokens=[AppWindowToken{e0bdfd5 token=Token{48c7c8c ActivityRecord{6d4a7de u0 com.xingin.xhs/.index.v2.IndexActivityV2 t256}}}]
mTempInsetBounds=[0,0][0,0]
Activity #0 AppWindowToken{e0bdfd5 token=Token{48c7c8c ActivityRecord{6d4a7de u0 com.xingin.xhs/.index.v2.IndexActivityV2 t256}}}
windows=[Window{300ad1c u0 com.xingin.xhs/com.xingin.xhs.index.v2.IndexActivityV2}]
windowType=2 hidden=false hasVisible=true
app=true mVoiceInteraction=false
task={taskId=256 appTokens=[AppWindowToken{e0bdfd5 token=Token{48c7c8c ActivityRecord{6d4a7de u0 com.xingin.xhs/.index.v2.IndexActivityV2 t256}}}] mdr=false}
类似上面的,我找的就是Activity 下面的: com.xingin.xhs 和 .index.v2.IndexActivityV2
然后我们点start session, 发现就可以连上手机了,然后可以参考网上其他教程去抓dom,然后写python脚本爬数据了。。
参考资料:
https://www.cnblogs.com/guowenrui/p/16990067.html
https://www.cnblogs.com/crstyl/p/14690895.html