模拟登陆西电研究生教务处(爬虫1)
一、HTTP協議
HTTP是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫。
用于從WWW服務器傳輸超文本到本地瀏覽器的傳送協議。
HTTP的請求響應模型
客戶端發起請求,服務器回送響應。
這樣就限制了使用HTTP協議,無法實現在客戶端沒有發起請求的時候,服務器將消息推送給客戶端。
工作流程
一次HTTP操作稱為一個事務,其工作過程可分為四步:
1. 客戶機與服務器需要建立連接。只要單擊某個超級鏈接,HTTP的工作開始。
2. 建立連接后,客戶機發送一個請求給服務器。
3. 服務器接到請求后,給予相應的響應信息。
4. 客戶端接收服務器所返回的信息通過瀏覽器顯示在用戶的顯示屏上,然后客戶機與服務器斷開連接。
請求報頭
請求報頭允許客戶端向服務器端傳遞請求的附加信息以及客戶端自身的信息。
響應報頭
響應報頭允許服務器傳遞不能放在狀態行中的附加響應信息,以及關于服務器的信息和對Request-URI所標識的資源進行下一步訪問的信息。
二、Python3.X爬蟲編程
1、簡單的爬蟲
python3.X
一個簡單的示例爬蟲
2、偽裝成瀏覽器來爬網頁
有些網頁,比如登錄的。如果你不是從瀏覽器發起的起求,這就不會給你響應,這時我們就需要自己來寫報頭。然后再發給網頁的服務器,這時它就以為你就是一個正常的瀏覽器。從而就可以爬了!
python3.4 一個簡單的示例爬蟲 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())來看看請求報頭,就是和我們設置的一個樣。
返回的HTML是一樣的。
3、爬取網站上的圖片
前面我們可以爬網頁了,下一步我們就可以批量的自動下載該網頁上的各種數據了,比如,下載該網頁上的所有圖片。
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__": #程序運行入口 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) #構造請求報頭 webpage = urllib.request.urlopen(req) #發送請求報頭 contentBytes = webpage.read() for link, t in set(re.findall(r'(https:[^\s]*?(jpg|png|gif))', str(contentBytes))): #正則表達式查找所有的圖片 print(link) try: urllib.request.urlretrieve(link, destFile(link)) #下載圖片 except: print('失敗') #異常拋出4、模擬登陸西電研究生教務處
#!/usr/bin/env python3# -*- coding: utf-8 -*- import requests url = 'http://jwxt.xidian.edu.cn/caslogin.jsp' #login網址id = '學號' 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)
返回的狀態碼為200.
這里用到了Requests模塊,還不會使用的可以查看中文文檔 ,它給自己的定義是:HTTP for Humans,因為簡單易用易上手,我們只需要傳入Url地址,構造請求頭,傳入post方法需要的數據,就可以模擬瀏覽器登陸了。
總結
以上是生活随笔為你收集整理的模拟登陆西电研究生教务处(爬虫1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 广东中学计算机课可教什么,广东中学教师资
- 下一篇: 力扣276 周赛 2139. 得到目标值