模拟登陆西电研究生教务处(爬虫1)
一、HTTP協(xié)議
HTTP是Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫。
用于從WWW服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議。
HTTP的請(qǐng)求響應(yīng)模型
客戶端發(fā)起請(qǐng)求,服務(wù)器回送響應(yīng)。
這樣就限制了使用HTTP協(xié)議,無法實(shí)現(xiàn)在客戶端沒有發(fā)起請(qǐng)求的時(shí)候,服務(wù)器將消息推送給客戶端。
工作流程
一次HTTP操作稱為一個(gè)事務(wù),其工作過程可分為四步:
1. 客戶機(jī)與服務(wù)器需要建立連接。只要單擊某個(gè)超級(jí)鏈接,HTTP的工作開始。
2. 建立連接后,客戶機(jī)發(fā)送一個(gè)請(qǐng)求給服務(wù)器。
3. 服務(wù)器接到請(qǐng)求后,給予相應(yīng)的響應(yīng)信息。
4. 客戶端接收服務(wù)器所返回的信息通過瀏覽器顯示在用戶的顯示屏上,然后客戶機(jī)與服務(wù)器斷開連接。
請(qǐng)求報(bào)頭
請(qǐng)求報(bào)頭允許客戶端向服務(wù)器端傳遞請(qǐng)求的附加信息以及客戶端自身的信息。
響應(yīng)報(bào)頭
響應(yīng)報(bào)頭允許服務(wù)器傳遞不能放在狀態(tài)行中的附加響應(yīng)信息,以及關(guān)于服務(wù)器的信息和對(duì)Request-URI所標(biāo)識(shí)的資源進(jìn)行下一步訪問的信息。
二、Python3.X爬蟲編程
1、簡單的爬蟲
python3.X
一個(gè)簡單的示例爬蟲
2、偽裝成瀏覽器來爬網(wǎng)頁
有些網(wǎng)頁,比如登錄的。如果你不是從瀏覽器發(fā)起的起求,這就不會(huì)給你響應(yīng),這時(shí)我們就需要自己來寫報(bào)頭。然后再發(fā)給網(wǎng)頁的服務(wù)器,這時(shí)它就以為你就是一個(gè)正常的瀏覽器。從而就可以爬了!
python3.4 一個(gè)簡單的示例爬蟲 import urllib.request weburl = "http://www.douban.com/" webheader = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'} req = urllib.request.Request(url=weburl, headers=webheader) webPage=urllib.request.urlopen(req) data = webPage.read() data = data.decode('UTF-8') print(data) print(type(webPage)) print(webPage.geturl()) print(webPage.info()) print(webPage.getcode())來看看請(qǐng)求報(bào)頭,就是和我們?cè)O(shè)置的一個(gè)樣。
返回的HTML是一樣的。
3、爬取網(wǎng)站上的圖片
前面我們可以爬網(wǎng)頁了,下一步我們就可以批量的自動(dòng)下載該網(wǎng)頁上的各種數(shù)據(jù)了,比如,下載該網(wǎng)頁上的所有圖片。
import urllib.request import socket import re import sys import os targetDir = r"E:\PythonWorkPlace\load" #文件保存路徑 def destFile(path): if not os.path.isdir(targetDir): os.mkdir(targetDir) pos = path.rindex('/') t = os.path.join(targetDir, path[pos+1:]) return t if __name__ == "__main__": #程序運(yùn)行入口 weburl = "https://www.douban.com/" webheaders = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'} req = urllib.request.Request(url=weburl, headers=webheaders) #構(gòu)造請(qǐng)求報(bào)頭 webpage = urllib.request.urlopen(req) #發(fā)送請(qǐng)求報(bào)頭 contentBytes = webpage.read() for link, t in set(re.findall(r'(https:[^\s]*?(jpg|png|gif))', str(contentBytes))): #正則表達(dá)式查找所有的圖片 print(link) try: urllib.request.urlretrieve(link, destFile(link)) #下載圖片 except: print('失敗') #異常拋出4、模擬登陸西電研究生教務(wù)處
#!/usr/bin/env python3# -*- coding: utf-8 -*- import requests url = 'http://jwxt.xidian.edu.cn/caslogin.jsp' #login網(wǎng)址id = '學(xué)號(hào)' password = '密碼' lt_value = 'LT-31860-Nr4DeRHVPUcMaNqcVrB5XxzLecI0ev1481623540759-wHmD-cas' exe_value = 'e1s1'datas = {'username': id, 'password': password,"submit": "", "lt": lt_value, "execution": exe_value,"_eventId": "submit", "rmShown": '1'}headers = {'User-Agent': "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0",'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",# "Host": "ids.xidian.edu.cn","Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3","Accept-Encoding": "gzip, deflate","Referer": "http://ids.xidian.edu.cn/authserver/login?service=http%3A%2F%2Fjwxt.xidian.edu.cn%2Fcaslogin.jsp",# 'X-Requested-With': "XMLHttpRequest","Content-Type": "application/x-www-form-urlencoded"} sessions = requests.session() response = sessions.post(url, headers=headers, data=datas) print(response.status_code)
返回的狀態(tài)碼為200.
這里用到了Requests模塊,還不會(huì)使用的可以查看中文文檔 ,它給自己的定義是:HTTP for Humans,因?yàn)楹唵我子靡咨鲜?#xff0c;我們只需要傳入U(xiǎn)rl地址,構(gòu)造請(qǐng)求頭,傳入post方法需要的數(shù)據(jù),就可以模擬瀏覽器登陸了。
總結(jié)
以上是生活随笔為你收集整理的模拟登陆西电研究生教务处(爬虫1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 广东中学计算机课可教什么,广东中学教师资
- 下一篇: 力扣276 周赛 2139. 得到目标值