【py腳本】抓取某學(xué)習網(wǎng)站的作業(yè)題答案+寫(xiě)入csv
優(yōu)采云 發(fā)布時(shí)間: 2022-06-05 00:58【py腳本】抓取某學(xué)習網(wǎng)站的作業(yè)題答案+寫(xiě)入csv
【py腳本】抓取某學(xué)習網(wǎng)站的作業(yè)題答案+寫(xiě)入csv
大家好,歡迎來(lái)到阿里威威。
已經(jīng)要一年沒(méi)有寫(xiě)文章了,主要是我太懶了哈哈。。。那么今天帶大家實(shí)現一個(gè)如標題所見(jiàn)的腳本。之后你就可以對著(zhù)答案寫(xiě)作業(yè)了。。。(后果自負)
準備:
準備好后,直接切入正題。
內容:1.1 登錄, 存放cookies
為了獲取url, 我們先自己登錄然后嘗試獲取相關(guān)url。
登錄完之后,我們發(fā)現有個(gè)login的數據我們進(jìn)去看看。
Response Headers:
Payloads:
payloads里面就是我發(fā)送的data, 然后這個(gè)headers就是返回的標頭,這個(gè)東西在這個(gè)網(wǎng)站里可以判斷該賬號是否登錄。OK,之后我用postman驗證了一下這個(gè)對不對之后,到我們直接寫(xiě)代碼。
import?requests<br />import?csv<br /><br />log_url?=?'https://xapi.xiaosaas.com/rest/opp/login?tok=ca3a6dbd122dfbbf7324a39982f3c454'<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 獲取作業(yè)內容+答案
進(jìn)到作業(yè)的界面后會(huì )發(fā)現作業(yè)信息、答案甚至文章內容都存放在這個(gè)json里面了,之后你就可以激動(dòng)的解析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=ca3a6dbd122dfbbf7324a39982f3c454&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 />
目前只是測試答案的數據,但是執行后發(fā)現.....
然后我去看了一下閱讀題發(fā)現。。。原來(lái)那道題沒(méi)有選項,是一道句子插入題而且沒(méi)有在這個(gè)json里面QaQ,所以他才會(huì )是None類(lèi)型,所以再加個(gè)異常處理就行啦。
#?將上面的循環(huán)改為:<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('這個(gè)問(wèn)題沒(méi)有選項')<br /><br />
1.3 寫(xiě)入
將上面的代碼段改為:
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('這個(gè)問(wèn)題沒(méi)有選項')<br /><br /><br />
執行后...
ok完成了,我們下期再見(jiàn)。。。拜拜!






