前提、

1. 在这里我使用的是requests爬虫,因为题目过多所以,selenium的效率十分的低;
2. 这是一个异步请求,请认真的分析参数,不要以为这个很简单,否则你会掉进坑

坑和解析:

1.学会伪装:同一个IP和用户,大概请求250题目左右便会被封,推荐使用注册多个用户,保存cookie,做一个变量池,每请求一段时间更换头信息
2.地址参数分析:r,是一个1以内的随机浮点数,我为了找这个参数花了很长的时间,最后发现无用,id,参数是一个html页面一个JavaScript变量数组;
3.请注意分析lx.JS文件,你会发现上面题目的数组,被复制一份加入到一个list里面,再复制一份数组计入里面并且没有打乱,这一块请注意去重,使用正则匹配
4.返回的参数,图片底层做了映射,这一块,我简单的处理了,把所有名字后缀改为jpg,事实证明这个方法很有效

期望:

1.你开一个VIP,保存cookie,把里面的付费题目也爬下来吧,
2.为了一个更好的,请你找找JS,做到图片自动映射,我这个只能下载出JPG文件,如果遇到GIF文件便会下载不了,事实证明极少数题目是GIF文件
3.聊了这么久,请关注一下我的博客吧(感谢,应该会对你有用):https://blog.csdn.net/qq_41259576

源码:

  1. 不出意外的话复制皆可用
import pymysql
class SaveMysqlDate(object):'''控制变量区,如果需要自己参数请指定,'''def __init__(self,items,host='自己的IP',port=3306,user='自己的数据库',passwd='自己的密码',db='自己的数据库',charset='utf8'):self.__conn=pymysql.connect(host=host,port=port,user=user,passwd=passwd,db=db,charset=charset)self.__cur=self.__conn.cursor()self.__flag=set([True])self.__mysqlControl(items)'''储存控制区'''def __mysqlControl(self,items):try:self.dataPraise(items)self.__dataisNeedRollback()except Exception as e:print(e)'''数据回滚区'''def __dataisNeedRollback(self):try:if False in self.__flag:self.__conn.rollback()self.__conn.close()print('完整数据缺损,数据进行回滚,请检查!!!')else:self.__conn.commit()self.__conn.close()except Exception as e:print(e)self.__conn.close()'''数据插入区'''def insertList(self,sql,params):try:self.__cur.executemany(sql,params)self.__flag.add(True)except Exception as e:print(e)self.__flag.add(False)'''自定数据分析区'''def dataPraise(self,items):passclass extendMysql(SaveMysqlDate):#继承解析def dataPraise(self,items):self.insertList('123','234')import requests
from urllib import request,parse,error
from lxml import etree
import pymysql
import random
import time
import re
import os
from hashlib import md5'''requests爬虫'''
#需求分析:问题,选项,图片,答案.class Item():ID=Nonequestion=Noneoptions=Noneimg=Noneanswer=Noneexplain=None'''主类'''class abbreviation(object):def __init__(self):self.spider()#爬虫控制区def spider(self):items=[]allQuestion=self.getResponse()if len(allQuestion)>0:self.getResponse2(allQuestion)else:print('爬取失败')#爬取所有题目IDdef getResponse(self):target=[]try:urls=['http://mnks.jxedt.com/ckm1/sxlx/','http://mnks.jxedt.com/bkm1/sxlx/','http://mnks.jxedt.com/akm1/sxlx/','http://mnks.jxedt.com/ekm1/sxlx/']for url in urls:time.sleep(random.randint(2,4))req=request.Request(url=url,method='GET')user_agent='Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0;rv:11.0) like Gecko)'req.add_header('User-Agent',user_agent)response=request.urlopen(req)result=response.read().decode('utf8')allHTML=etree.HTML(result)#print(result)orTarget=allHTML.xpath('//script[@language="javascript"]/text()')orTarget=re.findall('\[(\d*),',str(orTarget[0]))target.extend(orTarget)return targetexcept Exception as e:print(e)return target#获取所有题目的信息,注意这是一个异步请求def getResponse2(self,numas):result=[]nums=set(numas)print('去重前',len(numas))print('去重后',len(nums))try:#爬虫头部用户信息变量池:Cookies=['; 58tj_uuid=24afa946-0161-4253-a040-8983714d3173; Hm_lpvt_b54f0f8b3b75a8b7486c9adedf28f361=1572275895; Hm_lvt_b54f0f8b3b75a8b7486c9adedf28f361=1572143868; init_refer=; new_session=0; new_uv=9; local_car_flag=ckm; jxedt_uid=MzM3NjQzNjcxMDU1ODY2MjcxMwExODU5MzQxMDIxMQE5OGU4ZjIxYzdjNjRiY2UxZjllNTg4ZmU5YWM2NGQwNAExNTcyMjc1ODY1Mjc2ATABMTU3MjI3NTg2NTI3MwEg; jxedt_uname=18593410211; jxedt_uother=bnVsbAHkuIDngrnpgJrlrablkZgtNDg3MwFudWxsATQBMA%3D%3D; jxedt_utype=user; lx_wdct_ckm1_0=e256e258e7682e3e285e; UM_distinctid=16e0c14c87632c-0ed88ebd4a35218-16222b12-13c680-16e0c14c8775d8; lx_sxlx_akm1_index=1; lx_sxlx_ckm4_index=1; lx_sxlx_huifukm1_index=1; lx_sxlx_bkm1_index=1; als=0; id58=e87rjV21AvlVp3FCB2t1Ag==','; Hm_lpvt_b54f0f8b3b75a8b7486c9adedf28f361=1572276455; Hm_lvt_b54f0f8b3b75a8b7486c9adedf28f361=1572143868; 58tj_uuid=24afa946-0161-4253-a040-8983714d3173; init_refer=; new_session=0; new_uv=9; local_car_flag=ckm; jxedt_uid=MzM3NjQzNzg3MDIxOTc1NTU3NwExNzg3MzQzNjg1MgFkNWU0ODQ4NzI0OGZiNDg3MGRjZTczN2Y3OGIxNDdkNQExNTcyMjc2NDA1NDczATABMTU3MjI3NjQwNTQ2NQEg; jxedt_uname=17873436852; jxedt_uother=bnVsbAHkuIDngrnpgJrlrablkZgtODc2MgFudWxsATQBMA%3D%3D; jxedt_utype=user; lx_wdct_ckm1_0=e256e258e7682e3e285e; UM_distinctid=16e0c14c87632c-0ed88ebd4a35218-16222b12-13c680-16e0c14c8775d8; lx_sxlx_akm1_index=1; lx_sxlx_ckm4_index=1; lx_sxlx_huifukm1_index=1; lx_sxlx_bkm1_index=1; als=0; id58=e87rjV21AvlVp3FCB2t1Ag==']header=['Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1','Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0','Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0;rv:11.0) like Gecko)','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.1 QQBrowser/6.9.11079.201'     ]headers={'x-requested-with':'XMLHttpRequest','Referer': 'http://mnks.jxedt.com/ckm1/sxlx/'}i=0for num in nums:print(i)headers['user-agent']=random.choice(header)url='http://mnks.jxedt.com/get_question?r='+str(random.random())+'&index='+str(num)headers['cookies']='lx_sxlx_ckm1_index='+num+random.choice(Cookies)time.sleep(random.randint(1,2))         respon=requests.get(url=url,headers=headers,timeout=3)if respon.status_code==200:content=respon.json()print(content)result.append(self.priaseJson(content))if len(result)==50 or i==len(nums)-1:self.saveAllInfo(result)result=[]i=i+1except Exception as e:print(e)#解析区def priaseJson(self,content):item=Item() item.ID=content.get('id')item.question=content.get('question')       item.img=content.get('imageurl')item.explain=content.get('bestanswer')item.answer=content.get('ta')answers=[]if content.get('c')=="" and content.get('d')=="":answers=['正确','错误','null','null']else:answers.append(content.get('a'))answers.append(content.get('b'))answers.append(content.get('c'))answers.append(content.get('d'))item.options=answersreturn item#储存区def saveAllInfo(self,items):extendMysql(items)#由于我将储存模块化,只需继承,编辑数据处理模块便好
class extendMysql(SaveMysqlDate):#主要数据处理区def dataPraise(self,items):   '''储存区'''#主信息params1=[]#副信息params2=[]#信息处理for item in items:item.img=self.save_image(item)params1.append((item.ID,item.question,item.img,item.explain,item.answer))params2.append((item.options[0],item.options[1],item.options[2],item.options[3],item.ID))sql1='INSERT INTO homework.myQuestion (qid, question,img,myExplain, answer) VALUES (%s,%s,%s,%s,%s)'sql2='INSERT INTO homework.options (a,b,c,d,qid) VALUES (%s,%s,%s,%s,%s)'self.insertList(sql1,params1)self.insertList(sql2,params2)#图片储存区,使用md5去冲def save_image(self,item): if item.img=="":return 'null'time.sleep(random.randint(1,2))img_path='img'+os.path.sepif not os.path.exists(img_path):os.makedirs(img_path)headers={'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.2 Safari/605.1.15'}try:url='http://img.58cdn.com.cn/dist/jxedt/app/static/img/kaoshi_p/'+str(re.findall('(.*)\..*',item.img)[0])+'.jpg'print(url)resp=requests.get(url,headers=headers)if resp.status_code==200:  content=resp.contentfilename=md5(content).hexdigest()file_suffix='.jpg'file_path=img_path+filename+file_suffixif not os.path.exists(file_path):with open(file_path,'wb')as fo:print(2)fo.write(content)else:print('图片重复',' ',file_path)return  filename+file_suffixexcept requests.ConnectionError:print('下载失败','失败')if __name__=="__main__":abbreviation()

爬取驾校一点通所有科目一信息相关推荐

  1. 四叶草的python代码_驾校一点通2021科目四_科目四安全文明驾驶_科目四模拟考试2021...

    在这段城市道路上行驶的最高速度不能超过多少? A.30公里/小时 B.40公里/小时 C.50公里/小时 D.70公里/小时 答案是A 这个标志的含义是告示前方道路施工,车辆左右绕行. 答案是错 如图 ...

  2. 驾校一点通下载|驾校一点通电脑版下载

    驾校一点通是一个为驾驶初学者神器.汽车驾驶员和驾驶培训机构服务的软件.具有选择驾校,试题练习,教学视频,购车指南等功能,非常的好用. 驾校一点通下载链接 驾校一点通电脑版是一款考驾照必备的电脑软件,主 ...

  3. python爬取股票代码_Python爬取百度股市通股票详细信息

    更多教程请移步至:洛凉博客 最近一直在看北京理工大学嵩教授主讲的:Python网络爬虫与信息提取 课程里面也有很多实例.大家可以去中国MOOC搜索查看下实例. 不过教授的思路挺好的.代码稳定性也没得说 ...

  4. 五年高考三年模拟暗部软件库_驾校一点通模拟考试 2020.2最新版题库编制

    今天A洲就为大家带来,驾校一点通为 电脑版(专为上班不让玩手机的你打造),随着情况好转,驾校也上班了,我们也终于可以安心考驾照了.有了A洲的保驾护航,比别人更早一步拿证. 驾校一点通模拟考试是专业的交 ...

  5. 驾校一点通2014电脑版 v1.5 官方版

    驾校一点通2014电脑版 v1.5 官方版 软件大小:6.41MB  软件语言:简体中文 软件类别:应用其他 软件授权:免费版 应用平台:/Win8/Win7/WinXP 是一款模拟驾考软件,该驾校一 ...

  6. 另一版本驾校一点通下载

    另一版本驾校一点通下载另一版本驾校一点通下载另一版本驾校一点通下载另一版本驾校一点通下载

  7. 仿驾校一点通android

    在学习Android开发的过程你,往往会去借鉴别人的应用是怎么开发的.今天(2015-4-24)本人就开始一系列的仿照其他比较好的安卓app,纯属学习和交流使用,不会应用到任何商用或广告上. *第一篇 ...

  8. 在学”驾校一点通“,希望可以顺利考过得证

    在学"驾校一点通",希望可以顺利考过得证 今天去报名考驾考了,希望可以顺利考过,拿到驾驶证. 好好学习,好好练习.

  9. 使用selenium自动爬取斗鱼直播平台的所有房间信息

    使用selenium自动爬取斗鱼直播平台的所有房间信息 文章目录 使用selenium自动爬取斗鱼直播平台的所有房间信息 使用selenium实现动态页面模拟点击 什么是selenium? selen ...

最新文章

  1. oculus ios学习资料整理
  2. MySql 查询小数保留两位小数
  3. shell date 日期格式化_抖音短视频系统开发,日期加减
  4. 气味识别应用_解决气味
  5. robot:接口入参为图片时如何发送请求
  6. 利用Octopress搭建一个Github博客
  7. python标准库math用法精要
  8. Spring MVC JSR-303验证框架之Hibernate-Validator
  9. [vscode] 使用正则表达式进行搜索
  10. POJ1001 —— Exponentiation(高精度幂问题)
  11. 基于matlab的捷联惯导算法编程(二)
  12. Sketch入门知识-基础功能介绍
  13. jQuery暴打灰太狼小游戏
  14. Vue使用Emoji表情
  15. C库-atoi(), atol(), atoll(), atof(), ceil(), ceilf(), ceill()
  16. Safari Web Extension 开发(1)
  17. 四川农大2020计算机专业录取分数线,四川农业大学2020年美术类本科专业录取分数线...
  18. List转String的简单方法
  19. 如何使用git创建项目,创建分支
  20. python 基础之pymouse鼠标操作

热门文章

  1. PCB电路板和集成电路的特点与区别
  2. 使用Python制作个消灭病毒的小游戏吧(教程含源码)
  3. ME3616 OpenSDK编译
  4. 2021-11-21STL——arraydeque
  5. 安装Edxposed出现问题:有Riru提示未安装Riru
  6. 2021-06-17Leetcode84.柱状图中最大的矩形 Leetcode.85最大矩形
  7. solidworks电气元件3d库_Solidworks标准件模型库非标设计国标件 SW素材模板
  8. druid连接池jar包_我的Java Web之路56 - MyBatis使用第三方数据源(比如Druid)
  9. 安装auto-fu.zsh让命令输入自动补全
  10. TiDB备份恢复工具