【py脚本】抓取某学习网站的作业题答案+写入csv
优采云 发布时间: 2022-06-05 00:58【py脚本】抓取某学习网站的作业题答案+写入csv
【py脚本】抓取某学习网站的作业题答案+写入csv
大家好,欢迎来到阿里威威。
已经要一年没有写文章了,主要是我太懒了哈哈。。。那么今天带大家实现一个如标题所见的脚本。之后你就可以对着答案写作业了。。。(后果自负)
准备:
准备好后,直接切入正题。
内容:1.1 登录, 存放cookies
为了获取url, 我们先自己登录然后尝试获取相关url。
登录完之后,我们发现有个login的数据我们进去看看。
Response Headers:
Payloads:
payloads里面就是我发送的data, 然后这个headers就是返回的标头,这个东西在这个网站里可以判断该账号是否登录。OK,之后我用postman验证了一下这个对不对之后,到我们直接写代码。
import requests<br />import csv<br /><br />log_url = 'https://xapi.xiaosaas.com/rest/opp/login?tok=ca3a6dbd122dfbbf7324a39982f3*敏*感*词*54'<br />headers = {<br /> 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 '<br /> 'Safari/537.36',<br />}<br />user_data = {<br /> 'domainalias': 'landwave',<br /> 'username': '虎哥你就是',<br /> 'password': '歌姬吧',<br /> 'device': 'pc'<br />}<br /><br />login_post = requests.post(log_url, headers=headers, data=user_data)<br /><br />cookies = login_post.cookies<br />get_token = login_post.headers.get('x-xiao-token')<br />
1.2 获取作业内容+答案
进到作业的界面后会发现作业信息、答案甚至文章内容都存放在这个json里面了,之后你就可以激动的解析json;里面的数据然后提取答案啦!
headers.update({<br /> 'x-xiao-token': get_token<br />})<br /><br />hw_url = 'https://xapi.xiaosaas.com/rest/opp/q/hwk/detail/sim?' \<br /> 'id=1007177&stuid=&builddrs=1&buildorg=1&preview=0&buildqs=1&' \<br /> 'tok=ca3a6dbd122dfbbf7324a39982f3*敏*感*词*54&R=9235724517241122&visitsrc=webpc'<br /><br />start_get = request.get(hw_url, headers=headers, cookies=cookies)<br />question_json = start_get.json()['qs'][0]['sections']<br />for i in range(len(qs_json)):<br /> questions = qs_json[i]['questions']<br /> for j in range(len(questions)):<br /> options = questions[j]['options']<br /> for k in range(len(options)):<br /> if options[k]['answer'] is True:<br /> print('yes')<br /> break<br />
目前只是测试答案的数据,但是执行后发现.....
然后我去看了一下阅读题发现。。。原来那道题没有选项,是一道句子插入题而且没有在这个json里面QaQ,所以他才会是None类型,所以再加个异常处理就行啦。
# 将上面的循环改为:<br />for i in range(len(qs_json)):<br /> questions = qs_json[i]['questions']<br /> for j in range(len(questions)):<br /> options = questions[j]['options']<br /> try:<br /> for k in range(len(options)):<br /> if options[k]['answer'] is True:<br /> print('yes')<br /> break<br /> else:<br /> print('no')<br /> except TypeError as t:<br /> print('这个问题没有选项')<br /><br />
1.3 写入
将上面的代码段改为:
file = open('answer.csv', 'w', encoding='utf-8', newline='')<br />writefile = csv.writer(file)<br /><br />start_get = requests.get(hw_url, headers=headers, cookies=cookies)<br />qs_json = start_get.json()['qs'][0]['sections']<br />for i in range(len(qs_json)):<br /> questions = qs_json[i]['questions']<br /> for j in range(len(questions)):<br /> options = questions[j]['options']<br /> try:<br /> for k in range(len(options)):<br /> if options[k]['answer'] is True:<br /> writefile.writerow([str(j+1)+'\t', chr(ord('A')+k)+'\t', 'yes'])<br /> except TypeError as t:<br /> writefile.writerow([str(j+1)+'\t', 'no answer given'])<br /> # print('这个问题没有选项')<br /><br /><br />
执行后...
ok完成了,我们下期再见。。。拜拜!