type
status
date
slug
summary
tags
category
icon
password
comment
前段时间买了一本英语资料,是叫《情景生活口语2000句随翻随用》这本书。然后发现它那音频资源必须得打开网页才能听,或者微信收藏才能听,并且是JavaScript动态加载,并且这个资源是不能下载的。为了解决这个问题,我最近利用爬虫技术把它的网页结构分析了一下,成写了爬虫脚本,25秒钟就能把225个mp3文件全部下载到本地,本篇文章包含两部分内容:1.可以拿到一份好的英语学习资料,2.有兴趣的可以学习一下python爬虫技能。
扫码用微信登陆链接地址即可打开资源播放页面,如图:
下面是aiohttp
、aiofiles
库以及代码的整体架构与实现逻辑分析:
1.aiohttp
aiohttp
是一个用于 Python 的异步 HTTP 客户端和服务器库。它利用 Python 的 asyncio
库提供异步 I/O 操作,适用于需要高并发处理 HTTP 请求的场景。- 异步 HTTP 客户端:可以使用
async with
语句来发送异步的 HTTP 请求。
- 异步 HTTP 服务器:可以创建异步的 HTTP 服务器来处理大量并发请求。
- WebSocket 支持:支持异步 WebSocket 通信。
在上述代码中,
aiohttp
被用来发送异步的 HTTP POST 请求和 GET 请求,以获取 JSON 数据和下载 MP3 文件。2.aiofiles
aiofiles
是一个用于异步文件操作的 Python 库。它同样基于 asyncio
,允许在异步上下文中执行文件的读写操作。主要特性:
- 异步文件读写:提供与标准文件 I/O 类似的接口,但所有操作都是异步的。
- 支持上下文管理:可以使用
async with
语句来处理文件。
在上述代码中,
aiofiles
被用来异步地将下载的 MP3 文件保存到磁盘中。3.代码的整体架构与实现逻辑
3.1. 目录与文件路径设置
这些代码设置了当前工作目录,并定义了存放 JSON 数据和 MP3 文件的目录路径。
3.2. HTTP请求头设置
这些代码定义了 HTTP 请求所需的头信息,包括内容类型、Cookie、用户代理等。
3.3. 异步下载MP3文件
该函数使用
aiohttp
发送 GET 请求下载 MP3 文件,并使用 aiofiles
将文件异步写入磁盘。如果目标目录不存在,则创建该目录。3.4. 异步下载JSON数据并解析MP3下载链接
该函数发送 POST 请求以获取包含 MP3 下载链接的 JSON 数据,并解析出每个 MP3 文件的实际下载链接。然后,它创建并发下载任务,并使用
asyncio.gather
并发执行这些任务。3.5. 主函数:生成URL并启动下载任务
下面的两个脚本一个是同步采集,也就是顺序采集,asyncSpider.py是异步采集,代码仅供参考。
- Author:tongtongking
- URL:https://powerful-kilogram-28b.notion.site/article/English/spider
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts