爬蟲的概念:
爬蟲的應用:
1. 資料採集
大資料時代來臨,資料就是核心,資料就是生產力,越來越多的企業開始注重收集使用者資料,而爬蟲技術是收集資料的一種重要手段。
2. 搜尋引擎
3. 模擬操作
爬蟲也被廣泛用於模擬使用者操作,測試機械人,灌水機械人等。
爬蟲難點主要分為兩個方向
資料的獲取
網路公共資源都是為使用者準備的,為了避免被爬蟲採集,服務端會設定非常多的圖靈測試,阻止爬蟲的惡意爬取,也即是反爬措施。爬蟲開發工程師在開發爬蟲時,需要解決這些反爬措施。我們在開發爬蟲的過程中,有很大一部分的工作就是處理這些反爬措施。
採集的速度
大資料時代,需要巨大的資料量,動輒千萬條的級別,甚至上億條。如果採集速度跟不上,耗時過長,那麼就達不到商業要求。一般我們會採取併發以及分布式來解決速度上的問題。這也是爬蟲開發過程中的另外乙個重心。
在實際開發中,爬蟲的一般開發流程
1,確定目標資料
2,分析請求流程
3,構造請求報文
4,進行資料清洗
5,實現資料持久化
低階別的網路服務支援基本的 socket,它提供了標準的 bsd sockets api,可以訪問底層作業系統socket介面的全部方法。
高階別的網路服務模組 socketserver, 它提供了伺服器中心類,可以簡化網路伺服器的開發。
一些常使用的socket函式
首先匯入socket 和 re 模組
import re
import socket
建立客戶端
client = socket.socket()
client.connect(('www.baidu.com',80)) 注意:這裡面一定是個元組()
構造http請求報文
data = b'get / http/1.0\r\nhost: www.baidu.com\r\n\r\n' 請求方法後面一定要加上乙個空格
#客戶端傳送資料
client.send(data)
#定義乙個二進位制變數使用者接收響應資料
response = b''
#接收響應資料
temp = client.recv(1024)
while temp:
response += temp
temp = client.recv(1024)
with open('sockec_by_baidu_spider.html','wb') as f: 開啟乙個檔案,以二進位制的方式寫入檔案內容
f.write(response)
print(response)
print(len(re.findall(b'\r\n\r\n(.*)',data,re.s)[0]))
注意 構造http請求報文的格式為
執行完成過後會在當前資料夾下面生成乙個html檔案
1,利用socket建立乙個客戶端
2,連線要爬取的**,ip或網域名稱,加上埠,http埠為80,https埠為443,注意這裡面一定是元組的序列型別
3,構造http請求報文
4,傳送資料
5,接收資料
網路套接字(socket)
include uint32 t htonl uint32 t hostlong 主機位元組序轉網路位元組序 uint32 t htons uint32 t hostshort uint32 t ntohl uint32 t hostlong 網路位元組序轉主機位元組序 uint32 t ntohl...
網路 Socket套接字
socket介面在讀寫資料時,都是按字串的方式接收的,若要傳輸乙個 結構化的資料 就需要使用序列化和反序列化。序列化是將資料由多變到一的過程,反序列化是將資料由一分為多的過程。ip位址唯一標識公網當中的一台主機 埠號唯一標識互聯 定主機上的特定程序。每一對埠號加ip位址能夠唯一標識網路中一台主機上唯...
網路程式設計 Socket 套接字
網路程式設計 目前較為流行的網路程式設計模型是客戶機 伺服器 c s 結構。即通訊雙方一方作為服務 器等待客戶提出請求並予以響應。客戶則在需要服務時向伺服器提出申請。伺服器一般作為 守護程序始終執行,監聽網路埠,一旦有客戶請求,就會啟動乙個服務程序來響應該客 戶,同時自己繼續監聽服務埠,使後來的客戶...