不写一段代码来获取扇贝单词的接口数据

本文介绍了如何通过Python爬取扇贝单词的接口数据,包括登录、抓包、解密接口的过程,最终成功获取到单词的音频、释义等信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近想做一个背单词相关的app,要是自己一个个去网站搜然后再复制到数据库中太慢了,所以就考虑能不能通过接口或者python自动将数据爬下来。

第一步,登录并寻找可以爬取的数据(想直接看结论可以到第四步)

首先要先登录去寻找扇贝单词中有显示单词的地方,在我找了一圈,发现在单词学习的词表中(这要先自己提前添加一本词书),只要自己单词还没有开始背,可以在未学单词中来获取本词书的单词数据。

单词展示
到这未学单词页面,首先就是先查看扇贝单词是通过服务器渲染还是客户端渲染,要是服务器渲染,在源码中就可以直接看到单词的数据,那样就可以直接通过python来进行爬取,要是客户端渲染,那就得考虑通过调用接口来拿取单词数据了。
这里我到源码中去搜索matter这个单词。

搜索单词
结果发现,源码中并没有这个单词的数据,就说明得通过接口的方式来获得数据了。

第二步,对症下药

那此时就是得通过F12的网络检查来进行抓包了。(注意:这里要在Fetch/XHR中才会更清晰的展示)
抓包

通过下方的按钮,我们转换到第二页,看看发送的网络请求是什么样的。
抓包2

这里我们可以点击后在preview中查看,发现数据是有返回的,但却做了加密。
加密数据
到这一步,接下来的问题也就明确了很多,就是需要来解密他这个数据了。

第三步,解密接口

接下来点击initiator,来查看接口发请求的时候所调用的栈是怎么样的
检查栈
上方图片中蓝色标记的就是调用的文件名,因为我先前已经研究过扇贝的源码了,这里就直接到他接口解密的位置。(即在learning.ts文件)

源文件
看着代码可以发现,代码发请求的url就是获取单词的url,所以可以断定就是通过了bayDecode来进行了解密(对比url图片在下面)
请求链接
接下来就需要先去寻找下解密的具体代码到底是什么,这里通过Ctrl+F调出搜索来搜索bayDecode在哪里出现过。
搜索
发现bayDecode是从helpers中解构出的一个函数,那接下来就是去寻找helpers文件所在位置了
搜索
这里我就直接找出来给大家看代码所在位置
bayDecode
上图可以发现,原来是调用了bays4.d()方法,并且还挂载在了window,那解密我们就可以直接通过别人写好的,直接在控制台中调用bays4.d()来进行解密(这里要是有兴趣也可以使用debug来看扇贝是怎么实现加密的)

第四步,使用现成的方法获取数据

回到发请求的地方,将返回的加密数据Ctrl+C复制
复制
然后到控制台中,直接在控制台调用bays4.d()方法。
调用函数
然后将加密的数据直接Ctrl+V粘贴进去,回车一按!
获取json
发现接口的数据我们就获取到了,最后再将数据保存到json格式中,使用vscode或其他编译器来查看
数据
音频,单词,中文释义,轻轻松松获取到。

要是有更好的方法可以留言或者到我的个人博客来与我交流!!!

### 使用爬虫抓取扇贝网未学习单词数据采集方法 对于网络数据采集,特别是针对特定平台如扇贝网的学习进度和个人化信息获取,需注意该行为应遵循网站的服务条款以及法律法规。合法合规的方式是通过官方提供的API接口来访问个人学习记录和未学习的单词列表[^1]。 如果确实需要自动化手段辅助收集公开可访问的信息,在确保违反服务协议的前提下,可以考虑利用Python中的`requests`库发送HTTP请求并结合`BeautifulSoup`或者`lxml`解析HTML文档结构从而定位到目标数据节点提取所需内容;也可以采用Selenium模拟浏览器操作实现动态加载页面下的元素捕获。过这些技术仅适用于那些无需登录验证即可查看的内容区域[^2]。 下面给出一段基于静态网页分析的基础示例代码用于演示目的: ```python import requests from bs4 import BeautifulSoup url = 'https://www.shanbay.com/path/to/unlearned_words' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)', } response = requests.get(url, headers=headers) if response.status_code == 200: soup = BeautifulSoup(response.text, 'html.parser') # 假设未学单词位于class名为'word-item'的标签下 unlearned_word_elements = soup.find_all('div', class_='word-item') for element in unlearned_word_elements: word = element.get_text(strip=True) print(word) else: print(f"Failed to retrieve data: {response.status_code}") ``` 需要注意的是上述代码仅为概念性展示,并一定能直接应用于实际场景中因为具体路径、选择器等都需要依据实际情况调整。而且由于涉及个人信息保护等问题,建议优先探索是否有更合适的途径获得想要的数据资源[^3]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值