本文实现了爬取了某网站上的数学学科的试题题目,包含但不限题干,答案,解析,分析,题目难度等字段(其他学科教材等都一样)
根据爬取经验来看,单个普通账号只能爬取5页(50道题)试题,单个vip账号可爬取20页(200道)题目,超过的部分网站会提供错误的试题,第二天恢复正常。因此自行提供账号。 仅作为学习交流,禁止用于商业使用

简单实现逻辑(以数学为例)

  1. 账密登录
  2. 获得数学学科教材章节对应的key值
  3. 通过章节key值获取该章节所有试题列表(可设置筛选条件如单选,填空等)
  4. 试题列表中获取试题id
  5. 通过试题id进入试题详情页,即可根据需求自行爬取对应字段(数学公式的解析可以通过菁优网的页面展示规则,自定义自己的规则)

1.账密登录
在浏览器上登录菁优网,查看登录请求提交了哪些数据

如图请求的数据包含__RequestVerificationToken,Email,Password,Captcha,Ver,AnonID,Title,RUrl
多请求几次即可发现Ver,Title,RUrl是不变的,因此我们不考虑这几个数据,只需要找到其他数据提交给登录接口即可

通过分析页面可知,AnonID,Captcha是请求loginform接口得到的,而页面上我们并不能得到loginform接口的url,但是菁优网给我们一个新的接口iframelogin,请求该接口,返回的数据就是loginform接口的url

# 请求iframelogin接口,获取到loginform接口的url
def anonid_url_get():url_anonid = 'https://www.jyeoo.com/api/iframelogin?t=&u=&r={}'.format(random.uniform(0, 1))url_anonid_res = session.get(url_anonid)soup_url_anonid = BeautifulSoup(url_anonid_res.text, 'lxml')url_id = soup_url_anonid.find(id='mf').get('src')  # 获取到loginform接口的urlreturn url_id

然后我们请求loginform接口,即可得到相关数据

def get_anonid():url = anonid_url_get()  # loginform接口的urlres_id = session.get(url)  # 请求该接口soup1 = BeautifulSoup(res_id.text, 'lxml')AnonID = soup1.find(name='input', attrs={'id': 'AnonID'}).get('value')   # 获取AnonidToken = soup1.find(name='input', attrs={'name': '__RequestVerificationToken'})requestVerificationToken = Token.get('value')  # 获取__RequestVerificationTokenimg_url = soup1.find(id='capimg').get('src')  # 获取验证码的urlreturn requestVerificationToken, AnonID, img_url

所有需要提交的数据获得后,即可请求登录接口

def login_request(email, password):requestVerificationToken, anonid, img= get_anonid()cap = get_captcha(img)  # 获取验证码,该函数是接码平台form_data = {"__RequestVerificationToken": requestVerificationToken,"Email": email,"Password": password,"Captcha": cap,"Ver": "True","AnonID": anonid,"Title": "","RUrl": ""}form_data["Password"] = base64.b64encode(form_data["Password"].encode()).decode()  # 密码需要bs4转化url = "https://www.jyeoo.com/account/loginform"res = session.post(url, data=form_data)  # 请求登录接口soup_res = BeautifulSoup(res1.text, 'lxml')divLEMsg = soup_res.find(id='divLEMsg').get_text()# 登录成功divLEMsg为长度唯一的空白字符串,否则为错误信息,如验证码计算错误或账密错误if len(divLEMsg) == 1:divLEMsg = "登录成功"# print(divLEMsg)return cookie_get, divLEMsg, session   # 返回登录成功后的cookie,即认证信息,供后续获取试题使用

2.获取章节
这部分比较简单,我们只需要找到获取章节的请求接口即可

def get_chapters():  # 章节获取url_chap = 'http://www.jyeoo.com/physics2/ques/partialcategory?q=61d2b57e-7f3b-4384-bb98-4316fae290d9~88542894-5ee0-4349-8536-f9a080e2fda7~34113'headers = {}  # 浏览器上复制header即可data = {"a": "61d2b57e-7f3b-4384-bb98-*******","f": "0","cb": "_setQ","r": "0.7286671658019062"}   # 不同的数据对应不同的教材和学科,接口不变res = requests.post(url_chap, headers=headers, data=data)# print(res.text)soup = BeautifulSoup(res.text, 'lxml')chara = soup.find(id='JYE_POINT_TREE_HOLDER')for i in chara.select('body > ul > li'):i_nm = i.get("nm")print(i_nm)  # 大章节for j in i.select_one('ul'):j_nm = j.get("nm")print(j_nm)  # 中章节for q in j.select_one('ul'):q_nm = q.get("nm")print(q_nm)  # 小章节qq = q.select_one('ul')if qq:  # 如果有小小章节for x in qq:print(x)x_nm = x.get("nm")x_pk = x.get("pk")print(x_nm)  # 对应各章节print(x_pk)  # 章节id值else:q_pk = q.get("pk") #小章节id值print(q_pk)

3.通过章节key值获取该章节所有试题列表(可设置筛选条件如单选,填空等)

下次再写,累了

python爬虫获取试题(仅提供逻辑和部分代码,不提供完整实例)相关推荐

  1. 教你使用Python爬虫获取电子书资源实战!喜欢学习的小伙伴过来看啦!

    最近在学习Python,相对java来说python简单易学.语法简单,工具丰富,开箱即用,适用面广做全栈开发那是极好的,对于小型应用的开发,虽然运行效率慢点,但开发效率极高.大大提高了咱们的生产力. ...

  2. python网络爬虫面试题,搞定这套Python爬虫面试题(面试会so easy)

    搞定这套Python爬虫面试题(面试会so easy) 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  搞定这套Python爬虫面试题(面试会so easy).t ...

  3. python爬虫获取url_Python爬虫如何获取页面内所有URL链接?本文详解

    如何获取一个页面内所有URL链接?在Python中可以使用urllib对网页进行爬取,然后利用Beautiful Soup对爬取的页面进行解析,提取出所有的URL. 什么是Beautiful Soup ...

  4. 用Python爬虫获取百度企业信用中企业基本信息!太厉害了!

    一.背景 希望根据企业名称查询其经纬度,所在的省份.城市等信息.直接将企业名称传给百度地图提供的API,得到的经纬度是非常不准确的,因此希望获取企业完整的地理位置,这样传给API后结果会更加准确.百度 ...

  5. python爬虫获取下一页url_Python爬虫获取页面所有URL链接过程详解

    如何获取一个页面内所有URL链接?在python中可以使用urllib对网页进行爬取,然后利用Beautiful Soup对爬取的页面进行解析,提取出所有的URL. 什么是Beautiful Soup ...

  6. 突破次元壁障,Python爬虫获取二次元女友

    突破次元壁障,Python爬虫获取二次元女友 前言 程序说明 二次元女友获取程序 观察网页结构 页面解析 创建图片保存路径 图片下载 格式转换 爬取结果展示 完整程序 前言 (又到了常见的无中生友环节 ...

  7. Python爬虫 | Python爬虫获取女友图片

    Python爬虫 | Python爬虫获取女友图片 前言 程序说明 二次元女友获取程序 观察网页结构 页面解析 创建图片保存路径 图片下载 格式转换 爬取结果展示 完整程序 前言 (又到了常见的无中生 ...

  8. python爬虫获取百度贴吧内容

    python爬虫获取百度贴吧内容 python爬虫获取百度贴吧内容 *声明:本文仅供学习交流使用,请勿用于商业用途,违者后果自负.* python爬虫获取百度贴吧内容 博主是一个比较懒的人,不会按时更 ...

  9. python爬虫获取起点中文网人气排行Top100(快速入门,新手必备!)

    本篇博客小菌为大家带来的是用python爬虫获取起点中文网人气排行Top100的分享,希望大家能在学习的过程中感受爬虫的魅力!         我们先根据网址https://www.qidian.co ...

  10. python爬虫获取豆瓣图书Top250

    在上一篇博客<python爬虫获取豆瓣电影TOP250>中,小菌为大家带来了如何将豆瓣电影Top250的数据存入MySQL数据库的方法.这次的分享,小菌决定再带着大家去研究如何爬取豆瓣图片 ...

最新文章

  1. mysql send-q_MYSQL---初识
  2. Oracle用户被锁定解决方法
  3. 信息系统项目管理师采购管理
  4. 三十、深入Python中的Pickle和Json模块
  5. sqlserver 查看锁表,解锁
  6. matlab入门之旅,MATLAB 入门之旅学习笔记
  7. 原来Rproj还可以这么使用
  8. Golang的数组与切片——详解
  9. mysql 数据库之表操作
  10. mac 电脑连接不上github_Mac电脑使用终端连接服务器及传输文件
  11. oracle until freed,ORA-00257: archiver error. Connect internal only, until freed 错误的处理方法...
  12. Linux 能否拿下苹果 M1 阵地?
  13. 《算法图解》——广度优先探索与队列
  14. AngularJs的TDD
  15. uni-app之实现分页
  16. 模拟PspTerminateProcess结束进程-学习笔记
  17. CHIP-seq流程学习笔记(11)-使用GSEA软件进行GSEA分析
  18. 使用Python GDAL库对高分三号全极化SAR影像进行RPC几何校正(PolSARpro格式)
  19. 线性插值公式简单推导
  20. PyQt设置右下角弹窗

热门文章

  1. springboot Error executing DDL via JDBC Statement
  2. android日记app常用,只是意外 - 用这些 APP 来记录生活,再也不用担心无法坚持写日记 - Android 应用 - 【最美应用】...
  3. 围棋大师阿里,产品经理腾讯
  4. 现代Web发展趋势和前沿技术综述
  5. python运行代码无反应_linux执行python命令后没有反应,不打印日志信息
  6. 【阿里巴巴Java编程规范学习 三】Java异常日志规约
  7. Qt MDI及其使用方法
  8. 陈欧:创业是最美好的生活方式
  9. 联通光猫 - KD-YUN-811E - 管理员密码破解
  10. 调用百度语音合成API,Qt实现语音合成,Qt语音合成