代码在下方,运行一下就知道了,此篇文章不可多说,望理解。

courseId在学习T课程页面上方的网页地址中可以获取。

如果还不清楚去下面看思路讲解。

代码如下:

import os
import requests
from bs4 import BeautifulSoup
import threading
import time
from queue import Queue
import json'''
第一步,获取所有KnowledgeId
'''
print('获取所有KnowledgeId中...')
KnowledgeId = {}courseId = '94924595'# 初始url,后面需要用此url进行拼接
initUrl = 'https://mooc1.chaoxing.com/course/' + courseId + '.html'# module=2对应课程章节,如果你的课程章节不是2,请自行修改
url = 'https://mooc1.chaoxing.com/course/' + courseId + '.html?module=2'headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
}text = requests.get(url, headers=headers).text# 因为查找某标签用beautiful比较爽
soup = BeautifulSoup(text, "lxml")hrefs = soup.findAll('a', class_="chapterText")numbers = soup.findAll('i')n = 0
for href in hrefs:link = href.attrs['href']title = numbers[n].get_text(separator=" ", strip=True) + href.get_text(separator=" ", strip=True)n += 1KnowledgeId[title] = initUrl + link'''
第二步,根据KnowledgeId得到WorkId,这里使用多线程开启加速模式
'''
print('获取workId中,速度与您的网络情况有关,请耐心等待...')# 无限制队列
Q = Queue()# 任务对象列表
tasks = []
Title = []
for key, value in KnowledgeId.items():tasks.append(value)Title.append(key)# 线程数
thread_num = len(tasks)# 给列表指定一个初始长度,防止乱序
WorkId = [None] * len(tasks)class myThread(threading.Thread):def __init__(self, func):  # 这里可以加功能函数# 调用父类构造函数super(myThread, self).__init__()# 传入线程函数逻辑self.func = func  # 这里可以加功能函数def run(self):'''重写run方法'''global Qwhile not Q.empty():# 获得任务item = Q.get()  # 取出一个队列中减少一个,没有get函数会死循环self.func(item)  # 这里可以加功能函数'''执行的任务'''# 原来写Queue,没有初始化Q.task_done()  # 发信号告诉队列此任务结束,没有done函数会一直等待# 功能函数
def worker(item):  # requests书写位置# 设置一个指针防止乱序p = tasks.index(item)text = requests.get(url=item, headers=headers).textbeautiful = BeautifulSoup(text, "lxml")try:frame = beautiful.findAll('iframe', module="work")[0]except:print(Title[p] + '没有习题,跳过')returndata = json.loads(frame.attrs['data'])workid = data['workid']WorkId[p] = workidprint('添加章节' + Title[p])passdef job(item):p = tasks.index(item)text = requests.get(url=item, headers=headers).textsoup = BeautifulSoup(text, "lxml")单选题 = soup.find_all('div', style='line-height: 35px; font-size: 14px;padding-right:15px;')选项 = soup.find_all('ul', class_='Zy_ulTop')多选题 = soup.find_all('div', class_='Zy_TItle_p')# 其他题型自己想办法收集单选题.extend(多选题)# 如果下方长度不同8成9是有没有选项新题型# print(len(单选题))# print(len(选项))dic = '毛概题库'if not os.path.exists(dic):os.makedirs(dic)print(f'创建{dic}文件夹')with open(f'./{dic}/{NewTitle[p]}.txt', 'a', encoding='utf8') as f:for i in range(0, len(单选题)):line=单选题[i].get_text(separator=" ", strip=True)#去除'牛逼space'if ' ' in line:line.replace(' ','')try:print(line + 选项[i].get_text(separator=" ", strip=True) + '\n')f.write(line + 选项[i].get_text(separator=" ", strip=True) + '\n')except:print(line + '\n')f.write(line + '\n')pass'''
其他功能性函数
'''
# 定义一个函数列表,使main能多次执行
Func = [worker, job]# 主函数
def main(n):  # 可以创建多个线程池global Qthreads = []# 向队列中放入任务for task in tasks:Q.put(task)# 执行线程for i in range(thread_num):# 创建线程对象thread = myThread(Func[n])  # 这里可以加功能函数# 开始线程thread.start()# 把线程对象扔进线程池threads.append(thread)# 等待线程结束for thread in threads:# 将线程对象一个一个销毁thread.join()# 等待所有线程结束Q.join()# 本项目中执行
main(0)
'''
第三步,根据workId请求所有章节的iframe里面的题目
'''
tasks = []
NewTitle = []
m = 0
for id in WorkId:if (id == None):m += 1continueiframeUrl = 'https://mooc1.chaoxing.com/api/selectWorkQuestion?workId=' + id + '&courseId=' + courseIdtasks.append(iframeUrl)NewTitle.append(Title[m])m += 1
main(1)

思路讲解:python小爬虫学习思路讲解-数据挖掘文档类资源-CSDN文库

我的所有资源全部免费,如果csdn恶心到你了,请务必通知我。

这一篇我们已经获取到所有内容了,下一篇就讲讲怎么才能自动化搜索我们爬到的内容了(不拿来搜索,难道留着过年吗,一个个搜太麻烦,要自动化批量搜索才更加利于我们人前显圣)

python爬虫笔记(学习T)相关推荐

  1. 无敌python爬虫教程学习笔记(一)

    python爬虫系列文章目录 无敌python爬虫教程学习笔记(一) 无敌python爬虫教程学习笔记(二) 无敌python爬虫教程学习笔记(三) 无敌python爬虫教程学习笔记(四) 本文目录 ...

  2. 无敌python爬虫教程学习笔记(二)

    系列文章目录 无敌python爬虫教程学习笔记(一) 无敌python爬虫教程学习笔记(二) 无敌python爬虫教程学习笔记(三) 无敌python爬虫教程学习笔记(四) 手刃一个小爬虫 系列文章目 ...

  3. Python爬虫入门学习实战项目(一)

    静态数据的采集 第一个项目我们来抓取拉勾网的招聘信息,话不多说直接开始吧! 1.首先我们导入相关库: import requests from lxml import etree import pan ...

  4. python爬虫笔记第二章

    前言 你好! 这是基于b站2021年路飞学成爬虫教程的python爬虫学习笔记,主要是方便作者复习和回顾课程内容. 已经发布了第一章和第二章,可以在主页中查看. python爬虫笔记(第二章) 前言 ...

  5. python自学免费课堂-推荐5个Python爬虫免费学习资源(B站高赞!)

    这里是法学院毕业的Python程序员阿峰. 写在前面: 和学任何技能一样,学习Python爬虫也需要两点:行动和时间. 所有的爬虫速成课,我都不推荐. 如果您愿意付出时间和行动,每天在Python上进 ...

  6. Day2:python爬虫基础学习(大嘘)

    Day2:python爬虫基础学习(大嘘)) 教材&参考: 学习过程 Sublime配置教程 下载&安装 语言(设置中文) 设置字体/配色 配置Python环境 使用python官方编 ...

  7. Python爬虫笔记

    Python爬虫笔记 总体看过程 赋予地址 获取网页信息 获取网页中所需的信息 将得到所需的信息保存到硬盘 总体看过程 爬虫-从网络上爬取所需要的信息,怎么爬取?首先得知道你要去哪里获取(即地址,首先 ...

  8. Python爬虫笔记(3)- 爬取丁香园留言

    Python爬虫笔记(3)- 爬取丁香园留言 爬取丁香园留言:主要用到了模拟登录 爬取丁香园留言:主要用到了模拟登录 import requests, json, re, random,time fr ...

  9. 提供三块Python爬虫代码学习

    提供三块Python爬虫代码学习 爬取内涵段子 #encoding=utf-8 import urllib2import reclass neihanba():def spider(self):''' ...

  10. 慕课网python零基础入门教程_零基础Python爬虫入门学习一之综述

    原标题:零基础Python爬虫入门学习一之综述 大家好哈,最近博主在学习Python,学习期间也遇到一些问题,获得了一些经验,在此将自己的学习系统地整理下来,如果大家有兴趣学习爬虫的话,可以将这些文章 ...

最新文章

  1. ue4cmd怎么调用_[UE4,automation]UE4批渲染cmd篇
  2. org.json.JSONException: A JSONObject text must begin with #39;{#39; at character 1 of {解决方法...
  3. 在Rancher 1.6上部署Traefik负载均衡器
  4. HDU 5828 Rikka with Sequence (线段树+剪枝优化)
  5. 【博客项目】—数据分页(十)
  6. 如何在分屏浏览中并排使用两个Mac软件界面
  7. 串口转WiFi透传模块UART转WiFi模块嵌入式WiFi参数一键配置原理
  8. python中的statistics_详解python statistics模块及函数用法
  9. eyoucms添加附属栏目功能
  10. 『Hammerspoon』Mac 锁屏自动开关蓝牙
  11. steam换头像出现服务器错误_推特热搜第二!史上bug最多的游戏终于出现…
  12. 智力测验题(面试用)
  13. 汇编语言学习-DOSBox-MASM-安装及使用教程
  14. 【转】右键菜单大揭密
  15. 我希望我们在Java中拥有十大锡兰语言功能
  16. 蓝牙款血氧仪单片机开发
  17. c语言双胞胎字符串个数,怀双胞胎的概率有多大 八十九个孕妇中会有一个
  18. Linux 中ln 命令-n 参数的含义
  19. Windows提权方法
  20. javascript escape()和unescape()区别

热门文章

  1. 我的世界服务器怎么解压文件,我的世界整合包压缩包解压及使用
  2. LeetCode236.最近的公共祖先
  3. 电路中滤波电容和退耦电容_关于滤波电容、去耦电容、旁路电容作用及其原理...
  4. 图吧为什么叫图拉丁_如何评价百度贴吧「图拉丁吧」?
  5. linux命令下载电影,Linux命令行用wget下载精彩电影
  6. 何为全屋智能?华为用实力告诉你们:全屋智能是如此好用
  7. 常用超低阻值采样电阻阻值一览表
  8. ==和equals判断两个字符串是否相等
  9. 解析「Web3悖论」的内在机理与突破路径
  10. CTO应具备的知识体系