Press "Enter" to skip to content

Appium爬虫 小红书 真机抓数据

最近在研究小红书数据抓取

开始搜索引擎推荐的可行的方案:

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的控制台能看到错误,仔细去看错误日志,然后猜测或者去搜索引擎搜索。。

我遇到个错误: java.lang.SecurityException: Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS

参考资料: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

https://loki-pup.github.io/posts/2020-06-08-Python+Appium%E7%88%AC%E8%99%AB%20%E5%B0%8F%E7%BA%A2%E4%B9%A6app-2020

https://github.com/Big-Buffer/XiaohongshuSpider

https://mitmproxy.org

https://loki-pup.github.io/posts/2020-06-08-Python+Appium%E7%88%AC%E8%99%AB%20%E5%B0%8F%E7%BA%A2%E4%B9%A6app-2020

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注