云班课资源自动下载详细教程

本文详细介绍了如何使用Python爬虫自动下载云班课资源,包括环境准备、登录获取cookie、筛选资源链接、正则表达式匹配及文件下载存储的步骤,通过requests和session模块实现。

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

云班课资源自动下载详细教程

爬虫其实是个挺好的东西,我们可以利用它帮助我们学习,利用它进行资源搜集,然后通过分析数据可以帮我们更好的了解一些我们不知道的东西。比如可以将考研单词本中的单词和历年真题出现的单词进行匹配,看下哪些单词是真的高频出现…

实现思路:
1.请求url内容,即是获取网页源代码(html)
2.筛选我们需要的内容,即是资源链接和资源名称
3.下载并存储到本地路径

Ⅰ.准备好环境
第一步,我们需要获取网页的源代码,怎么获取?这个获取的方法就不用我们操心了,早就有大佬为我们写好了这些方法,python的强大就在于有很多很多各种功能的模块。这里用requests模块来获取,也可以用python自带的urllib,但是比较难用,requests可以直接发起get、post请求,而urllib.request只能先构造get,post请求,再发起,知道有这东西就好。
要使用该模块先安装,现在高级版本的python自带pip工具,可以直接在命令行窗口(cmd)输入:

 pip install requests

有了工具,我们开始写代码

Ⅱ.获取网页源代码

import requests   # 导入requests模块
page_url = "https://www.mosoteach.cn/web/index.php?c=res&m=index&clazz_course_id=xxxx"  # 你的目标url 我这里是错误的
response = requests.get(page_url)   # get请求
print(response.text)  # 打印内容

然后发现返回了一堆验证码错误,手机登录什么鬼的,这其实是被拦截了,因为你还没登陆(你连人家门口都还没进去,自然也拿不到人家家里的东西)。代码也没有伪装成浏览器,估计被识别成爬虫了。
我绕过拦截的方法是先登录进去,拿到cookie,然后伪装成浏览器去访问并在requests中带上cookie。(什么意思呢?这相当于你去你朋友家,先问她要个钥匙,然后去配了一把,下次你就可以绕过你朋友去开她的家门了😳)cookie其实就类似这个钥匙,是个凭证,你登陆网站后,网站的服务器就会生成一个cookie返回给你的浏览器并写入本地电脑。为了可以重用会话,我不直接使用requests.get(),而是使用了一个session对象来持久化Cookie,会话可以让您利用连接池,重用连接到同一主机,重用有什么好处呢?如果你要向同一主机发出多个请求,则基础的TCP连接将被重用,不用再次建立TCP连接,那样性能就可能会提升。写代码:

import requests  # 导入requests

def main():
	# 准备url
	page_url = "https://www.mosoteach.cn/web/index.php?c=res&m=index&clazz_course_id=xxxx" 
	# 创建session对象
	session = requests.session()
	# 伪装成浏览器
	# 伪装请求头
	headers = {
	"HOST": "www.mosoteach.cn",
	"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/",
	"Referer": "https://www.mosoteach.cn/web/index.php?c=interaction&"}
	# cookie带上
	cookie = {
	"SERVERID": "a8b3717a2a7782eb9819b46|1612957393|1612957354",
	"teachweb": "373cf1a973e994ce256aff38da4fcc67",
	"_uab_collina": "15901631708539446",
	"acw_tc": "2f624a471612957354ad1fdeb330b0e61c58c8204f965b1fb306",
	"login_token": "6f443f764221468b9c41d027f641c1b2aebbe88f0f680dd88"}
	session.headers = headers
	requests.utils.add_dict_to_cookiejar(session.cookies, cookie)
	response = session.get(page_url)
	print(response.text)


if __name__ == "__main__":
	main()
	

上面的page_url、headers、cookie都是不完整的,不方便透露,运行结果如下:运行结果
下面先说下怎么找那个headers和cookie,先来到资源页面
在这里插入图片描述右击,然后点击检查,点击Network,然后刷新页面
在这里插入图片描述
你的url
在这里插入图片描述
你的headers和cookie
在这里插入图片描述
Ⅲ.筛选我们需要的资源链接和资源名称

Ok,源代码已经拿到了,下面进行筛选
筛选我们需要的工具是正则表达式,在python即是需要导入re模块

# 提取下载链接
reObj = re.findall(r'data-href=.*', response.text) 
reObj.pop(0)   # 移除第一个,第一个不是资源链接
	for i in reObj:
		j = re.search( r'https:.*[^"]', i, re.M|re.I)
		download_url.append(j.group())   # 添加链接进列表,download_url 是定义在最外面的一个列表,用来保存提取出来的下载链接

# 提取资源名称,用来命名下载的文件
reFile = re.findall(r'<span class="res-name" [\s\S]*?</span>', response.text)
for m in reFile:
		t1 = re.split('>', m)
		t2 = re.split('<', t1[1])
		n = t2[0]
		download_filename.append(n)  # 添加文件名进列表,download_filename 是定义在最外面的一个列表,用来保存提取出来的文件名称

正则表达式内容较多,这里就不多说了,我的代码很low,你们自己可以自己写下怎么匹配,这里放个菜鸟教程的正则表达式吧:菜鸟教程正则表达式
先把下载存储部分说了先,最后直接放全部代码

Ⅳ.下载并存储到本地路径
如何下载、如何存储?上面获取完了链接和文件名称,放在了download_url和download_filename中,这里下载的方式是通过get请求,然后将返回的内容写到指定的文件中,别忘了,这里同样需要伪装。而写入到指定文件需要用到os模块
代码如下:

# 将下载部分封装成一个函数 参数是url 和 文件名
def download(fileurl, filename):
	session1 = requests.session()
	headers1 = {
	"HOST": "www.mosoteach.cn",
	"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36"}
	# 注意,这里cookie和main()中的cookie是一样的,所以应该将main()中的cookie提到最外面,减少代码冗余
	requests.utils.add_dict_to_cookiejar(session1.cookies, cookie)
	for i in range(len(fileurl)):
		# 遍历url列表,进行get请求
		response = session1.get(fileurl[i])
		# 写到指定文件 dirpath是你的需要存放的文件夹路径,我同样定义在了最外面 join()是拼接路径函数 将filename中的文件名和文件夹路径拼接在一起 
		open(os.path.join(dirpath, filename[i]), 'wb').write(response.content)
		print("下载完成")

Ⅴ.最后的代码样子

import requests  # 导入requests
import re  # 导入正则表达式模块
import os  # 导入系统模块

# 提取的下载链接
download_url = []
# 提取的文件名
download_filename = []
# 我的文件夹路径
dirpath = "D:/profession/无线组网与传输技术/下载测试/"
# cookie 放在最外面共用
cookie = {
	"SERVERID": "a8b3717a2a7782eb9819b46|1612957393|1612957354",
	"teachweb": "373cf1a973e994ce256aff38da4fcc67",
	"_uab_collina": "15901631708539446",
	"acw_tc": "2f624a471612957354ad1fdeb330b0e61c58c8204f965b1fb306",
	"login_token": "6f443f764221468b9c41d027f641c1b2aebbe88f0f680dd88"}

# 下载函数
def download(fileurl, filename):
	session1 = requests.session()
	headers1 = {
	"HOST": "www.mosoteach.cn",
	"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36"}
	requests.utils.add_dict_to_cookiejar(session1.cookies, cookie)
	for i in range(len(fileurl)):
		# 遍历url列表,进行get请求
		response = session1.get(fileurl[i])
		# 写到指定文件 dirpath是你的需要存放的文件夹路径,我同样定义在了最外面 join()是拼接路径函数 将filename中的文件名和文件夹路径拼接在一起 
		open(os.path.join(dirpath, filename[i]), 'wb').write(response.content)
		print("下载完成")

def main():
	# 准备url
	page_url = "https://www.mosoteach.cn/web/index.php?c=res&m=index&clazz_course_id=xxxx" 
	# 创建session对象
	session = requests.session()
	# 伪装成浏览器
	# 伪装请求头
	headers = {
	"HOST": "www.mosoteach.cn",
	"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/",
	"Referer": "https://www.mosoteach.cn/web/index.php?c=interaction&"}
	session.headers = headers
	requests.utils.add_dict_to_cookiejar(session.cookies, cookie)
	response = session.get(page_url)
	# 提取下载链接
	reObj = re.findall(r'data-href=.*', response.text) 
	reObj.pop(0)   # 移除第一个,第一个不是资源链接
	for i in reObj:
		j = re.search( r'https:.*[^"]', i, re.M|re.I)
		download_url.append(j.group())   # 添加链接进列表,download_url 是定义在最外面的一个列表,用来保存提取出来的下载链接

	# 提取资源名称,用来命名下载的文件
	reFile = re.findall(r'<span class="res-name" [\s\S]*?</span>', response.text)
	for m in reFile:
		t1 = re.split('>', m)
		t2 = re.split('<', t1[1])
		n = t2[0]
		download_filename.append(n)  # 添加文件名进列表,download_filename 是定义在最外面的一个列表,用来保存提取出来的文件名称
	
	# 调用下载函数
	download(download_url, download_filename)


if __name__ == "__main__":
	main()
	

记住替换目标url,你的cookie和header,我的运行结果如下:
在这里插入图片描述
在这里插入图片描述
如果你需要下载其他页面的,那还是需要你手动的更新url、headers、cookie,那个正则表达式匹配那里不知道会不会有问题,我想看大家怎么写,拜拜咯,睡觉啦~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值