一年前就是因为《写个爬虫对付三基三严》(https://gscfwid.github.io/computer/%E6%95%99%E7%A8%8B/2017/08/18/sanjisanyanpy.html)这篇文章才开始学习Python的,现在机会自己在同一个网站重复一遍。
有差不多九个月没有用Python,重新搭建环境、修改现有代码,又再次走了一些弯路。当时认为不会忘记、不值得记录的一些细节,居然没有印象了,大概是因为年老或睡眠不足了。这些流水账之类的东西,不值得写在印象笔记里面,那就增加一篇网络垃圾吧。
搭建环境需要Anaconda+PyCharm+Chrome+Fiddler。现在50M带宽,下载速度非常快。
PyCharm应该下载专业版,然后用edu邮箱认证的key注册,而不是下载教育版。
Anaconda的安装就最坑了。首先安装时要勾选Add to PATH。而且5.1版本之后出现了Windows有时无法完整安装的Bug,还被我遇到了。幸好把Anaconda安装在盘根就能解决问题,不然就得用miniconda引导安装,有点麻烦。而且Anaconda比较巨大,安装卸载一遍很费时。
Fiddler也变了。之前
在内网调试爬虫时
是用win7和http,也没有那么多干扰流量,现在用自己的win10,新的网站是使用https,又是AppContainer又是设置https非常麻烦。
好不容易配置好环境之后,打开PyCharm,逐行套用原有代码。
网址较一年前稍有改变,现在是https://sum.medu2011.com/zsy/
首先是Cookies的问题。使用密码和验证码登录之后就获得一个Cookies,使用这个Cookies就得直接用抓虫登录,跟之前抓过的两个网站一样。而这个网站每隔一段时间会刷新Cookies,需要重新手动获取。
原代码是添加一个名字用于存放Cookies,作为get的参数提交。
但其实直接把它写在headers里面也可以。
headers = {
'Accept':'*/*',
'Accept-Encoding':'gzip, deflate',
'Accept-Language':'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-TW;q=0.6,ja;q=0.5',
'Connection':'keep-alive',
'Host':'sum.medu2011.com',
'Cookie':'JSESSIONID=0D7AA53641F78FF8784CC29D5F8DD7EB',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36',
'Referer':'https://sum.medu2011.com/zsy/pages/common/model_test.jsp?planlevelid=11950',
'X-Requested-With':'XMLHttpRequest',
'DNT':'1'
}
实际上需要研究的网页是两个:一个是试题列表页面,一个是具体的题库练习页面。
在试题列表页面找到试题编号。
点击“练习”按钮会弹出考试界面。不知道为什么,新的界面没有办法按F12,但右键→检查或者ctrl+shift+I还是可以调出调试窗口。
所有的页面是用同一个Cookies。
网页的结构已经被摸得很清楚了。试题就在JSON里面。request.get一下就能得到这个JSON。请求的URL有一个planLevelId参数,是试题编号,可以像原代码一样,放在url里面
也可以作为get的参数
req = s.get(url,params={'planLevelId': x},headers=headers)
接下来大部分代码是在处理这个JSON。
网上有很多在线的JSON格式化工具,比如http://tool.oschina.net/codeformat/json
原代码是提取题干和正确选项,但有一套题的很多正确选项是“以上都是”或者什么A+B+C之类的。
于是修改代码,把所有的选项都提取出来。
最后下载到的多个txt,可以在CMD窗口用type *.txt >>111.txt合并
领取专属 10元无门槛券
私享最新 技术干货