爬蟲基礎筆記—爬蟲入門+socket爬取一張圖片

爬蟲入門

基礎:

1.Python基礎:數據類型,函數,類,re(正則)
2.環境的安裝
3.面向對象——scrapy

品質:

1.耐心
2.不怕難
3.初心

HTTP與HTTPS協議

互聯網的飛速發展是商業經濟推動的。目前幾乎所有的商業應用都是基於互聯網的,它們一般採用c/s架構,b/s架構或者m/s架構。
c/s 即 client server 客戶端 服務端
b/s 即 browser server 瀏覽器 服務端
m/s 即 moblie server 移動端 服務端

1. HTTP

目前互連網上90%的網絡傳輸都是基於http協議。
HTTP是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用於從萬維網(WWW:World Wide Web )服務器傳輸超文本到本地瀏覽器的傳送協議。
HTTP是一個基於TCP/IP通信協議來傳遞數據(HTML 文件, 圖片文件, 查詢結果等)。
1.1 HHTP請求流程
一次http請求的基本流程是,有客戶端向服務端發起一次請求(request), 而服務器在接收到以後返回給客戶端一個響應(response)。所以一次完整的http請求包含請求和響應兩部分。
默認的http協議端口爲80端口。
1.2 URL
發送http請求時,通過url對網絡資源進行定位。
URL(Uniform Resource Locator),中文叫統一資源定位符。是用來標識某一處資源的地址。也即是我們常說的網址。以下面這個URL爲例,介紹下普通URL的各部分組成:
在這裏插入圖片描述
1.3 HTTP請求格式
在這裏插入圖片描述

GET/ HTTP/1.0\r\nHost: www.baidu.com\r\n\r\n

1.4 HTTP請求方式
根據http標準,http請求可以使用多種請求方法。
1.0定義了三種請求方法:GET,POST和HEAD方法
1.1新增了五種請求方法:OPTIONS,PUT,DELETE,TRACE和CONNECT方法。
常用的是get和post;
在這裏插入圖片描述

1.5 HTTP請求頭
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

自定義服務器(操作)

import socket
#創建服務端
server = socket.socket()
#綁定IP 端口
server.bind(('0.0.0.0',8080))
#監聽
server.listen(5)	#連接數
#接收
conn,addr = server.accept()
#接受數據
data = conn.recv(1024)
print(data)

1.6 HTTP響應狀態碼
在這裏插入圖片描述
例如:403禁止訪問 404資源不存在
1.7 HTTP響應報頭
在這裏插入圖片描述

爬蟲的概念

網絡爬蟲也叫網絡蜘蛛,它特指一類自動批量下載網絡資源的程序,這是一個比較口語化的定義。
更加專業和全面對的定義是:網絡爬蟲是僞裝成客戶端與服務端進行數據交互的程序。

1.爬蟲的應用

a. 數據採集
大數據時代來臨,數據就是核心,數據就是生產力,越來越多的企業開始注重收集用戶數據,而爬蟲技術是收集數據的一種重要手段。
b. 搜索引擎
百度,谷歌等搜索引擎都是基於爬蟲技術。
c. 模擬操作
爬蟲也被廣泛用於模擬用戶操作,測試機器人,灌水機器人等。
爬蟲的難點
數據的獲取(反爬) 和 採集的速度(併發,分佈式,多線程提高)
爬蟲案例
在這裏插入圖片描述

2.會話技術

Cookie(可以理解爲一個憑證)

某些網站辨別用戶身份,進行跟蹤儲存在用戶本地終端上的數據(加密)
Cookie其實就是由服務器發給客戶端的特殊信息,而這些信息以文本文件的方式存放在客戶端,然後客戶端每次向服務器發送請求的時候都會帶上這些特殊的信息。 服務器在接收到Cookie以後,會驗證Cookie的信息,以此來辨別用戶的身份。

Session

Session,中文經常翻譯爲會話,其本來的含義是指有始有終的一系列動作/消息,比如打電話時從拿起電話撥號到掛斷電話這中間的一系列過程可以稱之爲一個session。這個詞在各個領域都有在使用。
而我們web領域,一般使用的是其本義,一個瀏覽器窗口從打開到關閉這個期間。
Session的目的則是,在一個客戶從打開瀏覽器到關閉瀏覽器這個期間內,發起的所有請求都可以被識別爲同一個用戶。而實現的方式則是,在一個客戶打開瀏覽器開始訪問網站的時候,會生成一個cookie,SessionID,這個ID每次的訪問都會帶上,而服務器會識別這個SessionID並且將與這個SessionID有關的數據保存在服務器上。由此來實現客戶端的狀態識別。因此session是基於cookie的
Session與Cookie相反,Session是存儲在服務器上的數據,只由客戶端傳上來的SessionId來進行判定,所以相對於Cookie,Session的安全性更高。
一般SessionID會在瀏覽器被關閉時丟棄,或者服務器會驗證Session的活躍程度,例如30分鐘某一個SessionID都沒有活躍,那麼也會被識別爲失效。
案例1

"""
利用 socket 下載一張圖片
"""
import socket
import re
client = socket.socket()
img_url = 'http://bizhi.zhuoku.com/2019/12/13/xinbagou/xinbagou02.jpg'
# http 請求報文
data = '''GET /2019/12/13/xinbagou/xinbagou02.jpg HTTP/1.1\r\nHost: bizhi.zhuoku.com\r\n\r\n'''
# 連接服務器
client.connect(('bizhi.zhuoku.com', 80))
# 發送請求
client.send(data.encode())
# 接收圖片信息變量
img_data = b''
# 接收響應 第一次,包含響應頭
res = client.recv(1024)
# 獲取數據長度
length = int(re.findall(b'Content-Length: (.*?)\r\n', res)[0])
# 獲取 第一次請求中的數據
img_data += re.findall(b'\r\n\r\n.*', res, re.S)[0]
# 循環接收
while True:
    temp = client.recv(1024)
    #檢測 數據是否收完
    if temp:
        img_data += temp
    else:
        break
    if len(img_data) >= length:
        break

client.close()
img_data = img_data.strip()

with open('text.jpg', 'wb') as f:
    f.write(img_data)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章