三基三严网站爬虫的一些小问题

一年前就是因为《写个爬虫对付三基三严》(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合并

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181002G1D4JD00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券