date: 2016-12-12 18:49:28
一、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ù),其工作過程可分為四步:
- 客戶機(jī)與服務(wù)器需要建立連接赞哗。只要單擊某個(gè)超級(jí)鏈接雷则,HTTP的工作開始。
- 建立連接后肪笋,客戶機(jī)發(fā)送一個(gè)請(qǐng)求給服務(wù)器月劈。
- 服務(wù)器接到請(qǐng)求后,給予相應(yīng)的響應(yīng)信息藤乙。
- 客戶端接收服務(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拴念、簡(jiǎn)單的爬蟲
python3.X
一個(gè)簡(jiǎn)單的示例爬蟲
import urllib.request
url = "http://www.douban.com/"
webPage=urllib.request.urlopen(url)
data = webPage.read()
data = data.decode('UTF-8')
print(data)
print(type(webPage))
print(webPage.geturl())
print(webPage.info())
print(webPage.getcode())
2、偽裝成瀏覽器來爬網(wǎng)頁
有些網(wǎng)頁褐缠,比如登錄的政鼠。如果你不是從瀏覽器發(fā)起的起求,這就不會(huì)給你響應(yīng)队魏,這時(shí)我們就需要自己來寫報(bào)頭公般。然后再發(fā)給網(wǎng)頁的服務(wù)器,這時(shí)它就以為你就是一個(gè)正常的瀏覽器。從而就可以爬了官帘!
python3.4
一個(gè)簡(jiǎn)單的示例爬蟲
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)頁上的所有圖片。
python3.x 爬蟲教程
爬取網(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 = '1601120338'
password = '113411'
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)楹?jiǎn)單易用易上手撩独,我們只需要傳入U(xiǎn)rl地址,構(gòu)造請(qǐng)求頭账月,傳入post方法需要的數(shù)據(jù)综膀,就可以模擬瀏覽器登陸了。