模擬登陸本校官網(wǎng)爬取成績(jī)

看了一段時(shí)間的爬蟲文章和視頻,總感覺看的懂但是實(shí)際操作自己的項(xiàng)目卻是難點(diǎn)比較多,還是因?yàn)橹R(shí)點(diǎn)不夠扎實(shí)萨西。今天嘗試一下登陸本校的官網(wǎng),并在之后能夠爬取到想要的信息旭旭。

系統(tǒng):win10 1803

工具:Pycharm 1703

python版本:3.6

抓包工具:Charles

用到的模塊:requests,PIL,BeautifulSoup/lxml,os

我們學(xué)校的教務(wù)管理系統(tǒng):http://220.178.71.156:85/(jnw0uoqufqsohg3jngkaci55)/default2.aspx


登錄界面

使用抓包軟件登錄后抓到提交的數(shù)據(jù)

抓包數(shù)據(jù)

這些數(shù)據(jù)就是在模擬登陸向服務(wù)器post的數(shù)據(jù)谎脯,同時(shí)我們需要提交驗(yàn)證碼,但是驗(yàn)證碼是隨機(jī)動(dòng)態(tài)的持寄,所以我們需要找到驗(yàn)證碼的鏈接源梭。

驗(yàn)證碼鏈接

# 下載驗(yàn)證碼

s = requests.session()? ?#獲取session 在之后使用同一個(gè)session

imgUrl = "http://220.178.71.156:85/(jnw0uoqufqsohg3jngkaci55)/CheckCode.aspx?"

imgresponse = s.get(imgUrl, stream=True)

print(s.cookies)

image = imgresponse.contentDstDir = os.getcwd() + "\\"

print("保存驗(yàn)證碼在:" + DstDir + "code.png" + "\n")

try:

with open(DstDir + "code.png", "wb") as png:

png.write(image)

except IOError:

print("IO Error\n")

finally: png.close


# 打開并手動(dòng)輸入驗(yàn)證碼

img = Image.open('I:\pc_first\pc\code.png')

img.show()

data = {}


emmm,我開始用的圖片格式全是png格式并且可以自動(dòng)打開稍味,這樣對(duì)于隨機(jī)驗(yàn)證碼的獲取和使用就完成了废麻。

url = 'http://220.178.71.156:85/(jnw0uoqufqsohg3jngkaci55)/default2.aspx'

headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36',}

data = {

'__VIEWSTATE': 'dDwtMTg3MTM5OTI5MTs7Pu9NgXuEf8Rr/BvvkUWH8oCYiXB2',

'TextBox1': '我的學(xué)號(hào)',

'TextBox2': '我的密碼',

'TextBox3': input('輸入驗(yàn)證碼:'),

"Button1": "", 'lbLanguage': ""

}

response = s.post(url=url, data=data, headers=headers)

if 'xh=' in response.url:

print('登陸成功')

else:

False


登錄進(jìn)去后,可以得到另一個(gè)鏈接http://220.178.71.156:85/(jnw0uoqufqsohg3jngkaci55)/xs_main.aspx?xh=15040****模庐;

最后的就是我的學(xué)號(hào)烛愧,所以在最后加一個(gè)小的判斷,字段中如果有‘xh=’就是登錄成功了掂碱。


但是登錄之后呢怜姿,直接爬取成績(jī)就是爬取不下來,一直使用一個(gè)空的列表顶吮。我看了好長(zhǎng)時(shí)間都沒發(fā)現(xiàn)問題社牲,還是請(qǐng)教的朋友。是因?yàn)槌煽?jī)所在的真正url改變了不是登錄跳轉(zhuǎn)的url悴了。


新url

我們需要在最初始的url然后通過操作得到可以進(jìn)行爬取成績(jī)的url搏恤,所以要對(duì)這個(gè)鏈接進(jìn)行組合。現(xiàn)在最初的界面代碼中進(jìn)行查找湃交。


url查找

查找發(fā)現(xiàn)能在最初的url找到的只有這個(gè)url 對(duì)比我們需要的url好像有區(qū)別熟空,xm=后面我們需要的是一串碼,但是這里是我的姓名搞莺。我就先試試用這個(gè)url能不能爬取下來成績(jī)息罗,如果不信再進(jìn)行進(jìn)一步的查找(其實(shí)我是找到了最后的url,再試了一下這個(gè)url才沧,發(fā)現(xiàn)效果一樣B鹾怼I芄巍!)

link0 = requests.post(response.url, headers=headers1).text

s1 = etree.HTML(link0)

link = s1.xpath('//*[@id="headDiv"]/ul/li[4]/ul/li[3]/a/@href')

url2 = 'http://220.178.71.156:85/(jnw0uoqufqsohg3jngkaci55)/' + str(link)[2:-2]

把href字段爬取下來挨摸,然后對(duì)比進(jìn)行拼接得到需要的鏈接孩革。


需要提交的data

爬取成績(jī)需要提交的data,因?yàn)槲尹c(diǎn)擊的是所有成績(jī) 所以學(xué)期得运,學(xué)年等提交都為空膝蜈,可以進(jìn)一步的提交想要的data得到想要的對(duì)應(yīng)成績(jī)。

data2 = {

'__EVENTTARGET': '',

'__EVENTARGUMENT': '',

'__VIEWSTATE': 'dDwxMzc0MjAwNjg2O3Q8cDxsPFNvcnRFeHByZXM7c2ZkY2JrO2RnMztkeWJ5c2NqO1NvcnREaXJlO3hoO3N0cl90YWJfYmpnO2NqY3hfbHNiO3p4Y2pjeHhzOz47bDxrY21jO1xlO2JqZztcZTthc2M7MTUwNDAyMjE2O3pmX2N4Y2p0al8xNTA0MDIyMTY7XGU7MDs+PjtsPGk8MT47PjtsPHQ8O2w8aTw0PjtpPDEwPjtpPDE5PjtpPDMwPjtpPDMyPjtpPDM0PjtpPDM2PjtpPDM4PjtpPDM5PjtpPDQxPjtpPDQzPjtpPDQ1PjtpPDQ3PjtpPDQ5PjtpPDUxPjtpPDUzPjtpPDU1PjtpPDU3PjtpPDU5PjtpPDYxPjtpPDYyPjtpPDYzPjtpPDY1PjtpPDY3PjtpPDY5PjtpPDcxPjtpPDczPjtpPDc1PjtpPDc3PjtpPDc5PjtpPDgwPjs+O2w8dDx0PDt0PGk8MTk+O0A8XGU7MjAwMS0yMDAyOzIwMDItMjAwMzsyMDAzLTIwMDQ7MjAwNC0yMDA1OzIwMDUtMjAwNjsyMDA2LTIwMDc7MjAwNy0yMDA4OzIwMDgtMjAwOTsyMDA5LTIwMTA7MjAxMC0yMDExOzIwMTEtMjAxMjsyMDEyLTIwMTM7MjAxMy0yMDE0OzIwMTQtMjAxNTsyMDE1LTIwMTY7MjAxNi0yMDE3OzIwMTctMjAxODsyMDE4LTIwMTk7PjtAPFxlOzIwMDEtMjAwMjsyMDAyLTIwMDM7MjAwMy0yMDA0OzIwMDQtMjAwNTsyMDA1LTIwMDY7MjAwNi0yMDA3OzIwMDctMjAwODsyMDA4LTIwMDk7MjAwOS0yMDEwOzIwMTAtMjAxMTsyMDExLTIwMTI7MjAxMi0yMDEzOzIwMTMtMjAxNDsyMDE0LTIwMTU7MjAxNS0yMDE2OzIwMTYtMjAxNzsyMDE3LTIwMTg7MjAxOC0yMDE5Oz4+Oz47Oz47dDx0PHA8cDxsPERhdGFUZXh0RmllbGQ7RGF0YVZhbHVlRmllbGQ7PjtsPGtjeHptYztrY3h6ZG07Pj47Pjt0PGk8OT47QDzlv4Xkv67or7476YCJ5L+u6K++O+WFrOWFseWfuuehgOivvjvlrp7ot7Xor7475LiT5Lia5qC45b+D6K++O+S4k+S4muivvjvkuJPkuJrpgInkv67or74757u85ZCI5a6e6Le16K++O1xlOz47QDwxOzI7Mzs0OzU7Njs3Ozg7XGU7Pj47Pjs7Pjt0PHA8cDxsPFZpc2libGU7PjtsPG88Zj47Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPFxlOz4+Oz47Oz47dDxwPHA8bDxUZXh0O1Zpc2libGU7PjtsPOWtpuWPt++8mjE1MDQwMjIxNjtvPHQ+Oz4+Oz47Oz47dDxwPHA8bDxUZXh0O1Zpc2libGU7PjtsPOWnk+WQje+8mum7hOa1qTtvPHQ+Oz4+Oz47Oz47dDxwPHA8bDxUZXh0O1Zpc2libGU7PjtsPOWtpumZou+8muS/oeaBr+S4juiuoeeul+acuuezuztvPHQ+Oz4+Oz47Oz47dDxwPHA8bDxUZXh0O1Zpc2libGU7PjtsPOS4k+S4mu+8mjtvPHQ+Oz4+Oz47Oz47dDxwPHA8bDxUZXh0O1Zpc2libGU7PjtsPOmAmuS/oeW3peeoiztvPHQ+Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDzkuJPkuJrmlrnlkJHvvJo7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7VmlzaWJsZTs+O2w86KGM5pS/54+t77yaMjAxNee6p+mAmuS/oeW3peeoizLnj607bzx0Pjs+Pjs+Ozs+O3Q8cDxwPGw8VmlzaWJsZTs+O2w8bzxmPjs+Pjs+Ozs+O3Q8QDA8cDxwPGw8VmlzaWJsZTs+O2w8bzxmPjs+PjtwPGw8c3R5bGU7PjtsPERJU1BMQVk6bm9uZTs+Pj47Ozs7Ozs7Ozs7Pjs7Pjt0PDtsPGk8MTM+Oz47bDx0PEAwPDs7Ozs7Ozs7Ozs+Ozs+Oz4+O3Q8cDxwPGw8VGV4dDtWaXNpYmxlOz47bDzoh7Pku4rmnKrpgJrov4for77nqIvmiJDnu6nvvJo7bzx0Pjs+Pjs+Ozs+O3Q8QDA8cDxwPGw8UGFnZUNvdW50O18hSXRlbUNvdW50O18hRGF0YVNvdXJjZUl0ZW1Db3VudDtEYXRhS2V5czs+O2w8aTwxPjtpPDE+O2k8MT47bDw+Oz4+O3A8bDxzdHlsZTs+O2w8RElTUExBWTpibG9jazs+Pj47Ozs7Ozs7Ozs7PjtsPGk8MD47PjtsPHQ8O2w8aTwxPjs+O2w8dDw7bDxpPDA+O2k8MT47aTwyPjtpPDM+O2k8ND47aTw1Pjs+O2w8dDxwPHA8bDxUZXh0Oz47bDxKWDAyMTAxNDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w86K6h566X5py65a+86K66Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDzlv4Xkv67or747Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDIuMDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8Jm5ic3BcOzs+Pjs+Ozs+Oz4+Oz4+Oz4+O3Q8QDA8cDxwPGw8VmlzaWJsZTs+O2w8bzxmPjs+PjtwPGw8c3R5bGU7PjtsPERJU1BMQVk6bm9uZTs+Pj47Ozs7Ozs7Ozs7Pjs7Pjt0PEAwPHA8cDxsPFZpc2libGU7PjtsPG88Zj47Pj47cDxsPHN0eWxlOz47bDxESVNQTEFZOm5vbmU7Pj4+Ozs7Ozs7Ozs7Oz47Oz47dDxAMDw7Ozs7Ozs7Ozs7Pjs7Pjt0PEAwPHA8cDxsPFZpc2libGU7PjtsPG88Zj47Pj47cDxsPHN0eWxlOz47bDxESVNQTEFZOm5vbmU7Pj4+Ozs7Ozs7Ozs7Oz47Oz47dDxAMDxwPHA8bDxWaXNpYmxlOz47bDxvPGY+Oz4+O3A8bDxzdHlsZTs+O2w8RElTUExBWTpub25lOz4+Pjs7Ozs7Ozs7Ozs+Ozs+O3Q8QDA8cDxwPGw8VmlzaWJsZTs+O2w8bzxmPjs+Pjs+Ozs7Ozs7Ozs7Oz47Oz47dDxAMDxwPHA8bDxWaXNpYmxlOz47bDxvPGY+Oz4+O3A8bDxzdHlsZTs+O2w8RElTUExBWTpub25lOz4+Pjs7Ozs7Ozs7Ozs+Ozs+O3Q8QDA8cDxwPGw8VmlzaWJsZTs+O2w8bzxmPjs+PjtwPGw8c3R5bGU7PjtsPERJU1BMQVk6bm9uZTs+Pj47Ozs7Ozs7Ozs7Pjs7Pjt0PEAwPDtAMDw7O0AwPHA8bDxIZWFkZXJUZXh0Oz47bDzliJvmlrDlhoXlrrk7Pj47Ozs7PjtAMDxwPGw8SGVhZGVyVGV4dDs+O2w85Yib5paw5a2m5YiGOz4+Ozs7Oz47QDA8cDxsPEhlYWRlclRleHQ7PjtsPOWIm+aWsOasoeaVsDs+Pjs7Ozs+Ozs7Pjs7Ozs7Ozs7Oz47Oz47dDxwPHA8bDxUZXh0O1Zpc2libGU7PjtsPOacrOS4k+S4muWFsTExMeS6ujtvPGY+Oz4+Oz47Oz47dDxwPHA8bDxWaXNpYmxlOz47bDxvPGY+Oz4+Oz47Oz47dDxwPHA8bDxWaXNpYmxlOz47bDxvPGY+Oz4+Oz47Oz47dDxwPHA8bDxWaXNpYmxlOz47bDxvPGY+Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDxaSlU7Pj47Pjs7Pjt0PHA8cDxsPEltYWdlVXJsOz47bDwuL2V4Y2VsLzk3MDUyNzEuanBnOz4+Oz47Oz47Pj47Pj47PgGGyciVaIkDb4w+sTsVpJ8ImvRN',

'btn_zcj': '(unable to decode value)',

'hidLanguage': '',

'ddl_kcxz': '',

'ddlXQ': '',

'ddlXN': '',}

headers1 = {

'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36', 'Referer': 'http://220.178.71.156:85/(jnw0uoqufqsohg3jngkaci55)/xscjcx.aspx?xh=150402216&xm=%BB%C6%BA%C6&gnmkdm=N121605',

'Connection': 'keep-alive',

'Accept-Encoding': 'gzip, deflate',

'Accept-Language': 'zh-CN,zh;q=0.9',

'Upgrade-Insecure-Requests': '1'

}

data4 = s.post(url3, data=data2, headers=headers1).text

s2 = etree.HTML(data4)

with open('C:/Users\linx00\Desktop\cj.txt', 'w', encoding='utf-8') as f:

years = s2.xpath('//*[@id="Form1"]/div[2]/div/span/table/tr/td[1]/a/text()|//*[@id="Form1"]/div[2]/div/span/table/tr/td[1]/text()')

xueqi = s2.xpath('//*[@id="Form1"]/div[2]/div/span/table/tr/td[2]/a/text()|//*[@id="Form1"]/div[2]/div/span/table/tr/td[2]/text()')

kcmc = s2.xpath('//*[@id="Form1"]/div[2]/div/span/table/tr/td[4]/a/text()|//*[@id="Form1"]/div[2]/div/span/table/tr/td[4]/text()')

#因?yàn)榍懊娴膶傩圆灰粯?所以使用或關(guān)系來爬取

kcxz = s2.xpath('//*[@id="Form1"]/div[2]/div/span/table/tr/td[5]/text()')

xuefen = s2.xpath('//*[@id="Form1"]/div[2]/div/span/table/tr/td[7]/text()')

jidian = s2.xpath('//*[@id="Form1"]/div[2]/div/span/table/tr/td[8]/text()')

chengji = s2.xpath('//*[@id="Form1"]/div[2]/div/span/table/tr/td[9]/text()')

bkchengji = s2.xpath('//*[@id="Form1"]/div[2]/div/span/table/tr/td[11]/text()')

f.write('{}\n,{}\n,{}\n,{}\n,{}\n,{}\n,{}\n,{}\n'.format(years,xueqi, kcmc, kcxz, xuefen, jidian, chengji, bkchengji))


這樣需要的全部成績(jī)就被全部保存下來了熔掺。(但是保存的很不美觀饱搏,對(duì)于格式我不是很清楚怎么進(jìn)行完美的修改!有大佬可以幫助一下)


成績(jī)表
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末置逻,一起剝皮案震驚了整個(gè)濱河市推沸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌诽偷,老刑警劉巖坤学,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異报慕,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)压怠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門眠冈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人菌瘫,你說我怎么就攤上這事蜗顽。” “怎么了雨让?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵雇盖,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我栖忠,道長(zhǎng)崔挖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任庵寞,我火速辦了婚禮狸相,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘捐川。我一直安慰自己脓鹃,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布古沥。 她就那樣靜靜地躺著瘸右,像睡著了一般娇跟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上太颤,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天逞频,我揣著相機(jī)與錄音,去河邊找鬼栋齿。 笑死苗胀,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的瓦堵。 我是一名探鬼主播基协,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼菇用!你這毒婦竟也來了澜驮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤惋鸥,失蹤者是張志新(化名)和其女友劉穎杂穷,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卦绣,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡耐量,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了滤港。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片廊蜒。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖溅漾,靈堂內(nèi)的尸體忽然破棺而出山叮,到底是詐尸還是另有隱情,我是刑警寧澤添履,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布屁倔,位于F島的核電站,受9級(jí)特大地震影響暮胧,放射性物質(zhì)發(fā)生泄漏锐借。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一叔壤、第九天 我趴在偏房一處隱蔽的房頂上張望瞎饲。 院中可真熱鬧,春花似錦炼绘、人聲如沸嗅战。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽驮捍。三九已至疟呐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間东且,已是汗流浹背启具。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留珊泳,地道東北人鲁冯。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像色查,于是被迫代替她去往敵國(guó)和親薯演。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容