【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完成了,我们下期再见。。。拜拜!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线