python爬蟲(一)爬蟲的認識 + 搜索引擎 + 爬蟲分類 + 使用爬蟲爬取數據流程 + 爬蟲必備知識點(http和https) + hash實現加密文件字符串

一、獲取數據的方式,爬蟲的必要性


  1. 企業生產的用戶數據:大型互聯網公司有海量用戶,所以他們積累數據有天然優勢,有數據意識的中小型企業,也開始積累的數據。

  2. 數據管理諮詢公司:艾瑞,埃森哲等。通常這樣的公司有很龐大的數據採集團隊,一般會通過市場調研、問卷調查、固定的樣本監測、和各行各業公司進行合作、專家對話(數據積累很多年了,最後得出科研結果)來採集數據。

  3. 政府/機構提供的公開數據:政府一般通過各地政府統計上報的數據進行合併;機構都是權威的第三方網站。

  4. 第三方數據平臺購買數據:貴陽大數據交易平臺,數據堂,淘寶等。通過各個數據交易平臺來購買各行各業需要的數據,根據獲取難度不同,價格也會不同。

  5. 爬蟲爬取數據:如果市場上沒有我們需要的數據,或者價格太高不願意買,那麼就可以招/做一個爬蟲工程師,從互聯網定向採集數據。


二、爬蟲的定義 分類 流程 搜索引擎


1. 網絡爬蟲的定義:


一個程序腳本--->自動的抓取互聯網上信息的腳本

2. 爬蟲可以解決的問題:


  • 解決冷啓動問題。
  • 搜索引擎的根基:做搜索引擎少不了爬蟲。
  • 建立知識圖譜,幫助建立機器學習知識圖譜。
  • 可以製作各種商品的比價軟件,趨勢分析。
  • 其他:比如分析淘寶上競爭對手的數據;分析微博的數據傳遞影響力;分析人與人之間的關係等。

3. 爬蟲工程師的進階之路


  • 初級爬蟲工程師

    1. web 前端的知識: HTML、CSS、JavaSc1ipt、 DOM、 DHTML 、Ajax、jQuery、json 等;
    2. 正則表達式, 能提取正常一般網頁中想要的信息,比如某些特殊的文字, 鏈接信息, 知道什麼是懶惰, 什麼是貪婪型的正則;
    3. 會使用 XPath 等獲取一些DOM 結構中的節點信息;
    4. 知道什麼是深度優先, 廣度優先的抓取算法, 及實踐中的使用規則;
    5. 能分析簡單網站的結構, 會使用urllib或requests 庫進行簡單的數據抓取。
  • 中級爬蟲工程師

    1. 瞭解什麼事HASH,會簡單地使用MD5,SHA1等算法對數據進行HASH一遍存儲
    2. 熟悉HTTP,HTTPS協議的基礎知識,瞭解GET,POST方法,瞭解HTTP頭中的信息,包括返回狀態碼,編碼,user-agent,cookie,session等
    3. 能設置user-agent進行數據爬取,設置代理等
    4. 知道什麼事Request,什麼事response,會使用Fiddler等工具抓取及分析簡單地網絡數據包;對於動態爬蟲,要學會分析ajax請求,模擬製造post數據包請求,抓取客戶端session等信息,對於一些簡單的網站,能夠通過模擬數據包進行自動登錄。
    5. 對於一些難搞定的網站學會使用phantomjs+selenium抓取一些動態網頁信息
    6. 併發下載,通過並行下載加速數據爬取;多線程的使用。
  • 高級爬蟲工程師

    1. 能夠使用Tesseract,百度AI,HOG+SVM,CNN等庫進行驗證碼識別。
    2. 能使用數據挖掘技術,分類算法等避免死鏈。
    3. 會使用常用的數據庫進行數據存儲,查詢。比如mongoDB,redis;學習如何通過緩存避免重複下載的問題。
    4. 能夠使用機器學習的技術動態調整爬蟲的爬取策略,從而避免被禁IP封禁等。
      能使用一些開源框架scrapy,scrapy-redis等分佈式爬蟲,能部署掌控分佈式爬蟲進行大規模數據爬取。

4. 爬蟲的分類


① 通用爬蟲:

就是將互聯網上頁面整體的內容爬取下來之後,保存到本地。

  • 通用爬蟲要想爬取網頁,需要網站的url.但是搜索引擎是可以搜索所有網頁的。那麼通用爬蟲url就要涉及到所有網頁,這個‘所有’是如何做到的。
    • 新網站向搜索引擎主動提交網址
    • 在其他網站上設置新網站外鏈。
    • 搜索引擎和DNS解析服務商(如DNSPod等)合作,新網站域名將被迅速抓取。

②聚焦爬蟲:

聚焦爬蟲在實施網頁抓取時會對內容進行處理篩選,儘量保證只抓取與需求相關的網頁信息。


5. 爬蟲的流程


在這裏插入圖片描述

  • 向起始url發送請求,並獲取響應
  • 對響應進行提取
  • 如果提取url,則繼續發送請求獲取響應
  • 如果提取數據,則將數據進行保存

6. 爬蟲如何爬取網頁數據


(一)網頁三大特徵:

  1. 每個網頁都有自己唯一的URL(統一資源定位符)來進行定位。

  2. 網頁都使用HTML(超文本標記語言)來描述頁面信息。

  3. 網頁都使用HTTP/HTTPS (超文本傳輸協議)協議來傳輸HTML數據。

(二)爬蟲的設計思路

  1. 首先確定需要爬取的網頁URL地址。

  2. 通過HTTP/HTTPS協議來獲取對應的HTML頁面。

  3. 提取HTML頁面裏有用的數據:

    a.如果是需要的數據,就保存起來。
    
    b.如果是頁面裏的其他URL,那就繼續執行第二步。
    

7. 搜索引擎:


  1. 搜索引擎的工作流程
    第一步:抓取網頁
    通過將待爬取的url加入到通用爬蟲的url隊列中,進行網頁內容的爬取
    第二步:數據存儲:
    將爬取下來網頁保存到本地。這個過程中會有一定的去重操作。如果某個網頁的內容大部分重複,搜索引擎可能不會保存。
    第三步:預處理
    提取文字
    中文分詞
    消除噪音(比如版權聲明文字、導航條、廣告等……)
    索引處理
    第四步: 設置網站排名,爲用戶提供檢索服務。

  1. 搜索引擎的侷限性(通用爬蟲)

    1、搜索引擎只能爬取原網頁,但是頁面90%內容都是無用的。
    2、搜素引擎不能滿足不同行業,不同員的特定需求。
    3、通用搜索引擎只能爬取文字信息,對於視頻,文件,音頻等其他信息無法爬取。
    4、只能基於關鍵字查詢,無法基於語義查詢。


三、爬蟲所需知識點


1. 爬蟲的準備工作


  1. robots協議

  • 定義:網絡爬蟲排除標準(全稱)
  • 作用:告訴搜索引擎哪些內容可以爬,哪些不能爬

  1. 網站地圖sitemap

  • 就是一個網站地圖,可以指導我們查看該網頁下有哪些內容
    在這裏插入圖片描述

  1. 估算網站大小

  • 在百度中輸入site:www.zhihu.com (site:目標網站網址)

  1. 識別網站用了哪些技術

  • 安裝builtwith:pip install builtwith
  • 爲了更好的瞭解網站,抓取該網站的信息,我們可以先了解一下該網站大致所使用的的技術架構。
    • 安裝builtwith:pip install bulitwith
    • 使用:在python交互環境下,輸入:
      Import buildwith
      Buildwith.parse(‘http://www.sina.com.cn’)
      
      在這裏插入圖片描述

  1. 尋找網站所有者
    在這裏插入圖片描述

2. http和https


  1. 什麼是http協議
  • http:超文本傳輸協議(全稱)
  • 是一個規範--------------->約束髮布和接收html頁面的規範

  1. 什麼是https協議
  • HTTPS (Hypertext Transfer Protocol over Secure Socket Layer)簡單講是http的安全版,在http下加入SSL層
    在這裏插入圖片描述

  1. http和https協議的端口號
  • http端口號:80
  • https端口號:443

  1. http協議的特點
  • 是一個應用層協議
  • 無連接(每次連接只處理一個請求)
    • 每次請求都是獨立的
    • http 1.1 增加了一個Connection:keep-alive,表示客戶端和服務器的連接是一個長連接
  • 無狀態
    • 無狀態表示客戶端每次請求都不能進行請求狀態。也就是兩條請求之間無法進行通信
    • cookie和session可以幫助記錄狀態

  1. url:統一資源定位符
  • 爲什麼可以通過url來定位互聯網上的任意資源?

    • http://ip:port/path
      • ip:可以定位一個電腦
      • port:端口號------->用來從互聯網上進入電腦
      • path:就是爲了在電腦中找到對應的資源路徑
  • 有三種特殊符號

    • ?:問號後面就是請求參數
    • &:請求參數用&連接。?username=‘zhangsan’&password=‘123’
    • ·#·:表示錨點,錨點就是在請求這個url時,頁面會跳入錨點指定位置
      • 基本格式:scheme://host[:port#]/path/…/?query-string
      scheme:協議(例如:http, http, ftp)
      host:服務器的IP地址或者域名
      port:服務器的端口(如果是走協議默認端口,缺省端口80)
      path:訪問資源的路徑
      query-string:參數,發送給http服務器的數據
      anchor:錨(跳轉到網頁的指定錨點位置)
      
  • 在python中,有一個模塊可以幫助我們解析url

        代碼:
        from urllib import parse
        
        url = 'http://localhost.com:8080/index.htm?username="zhangsan"&password="123"'
        print(parse.urlparse(url))
        
        輸入內容:
        ParseResult(
        scheme='http', 
        netloc='localhost.com:8080', 
        path='/index.htm', 
        params='', 
        query='', 
        fragment='')	
    

    在這裏插入圖片描述


  1. HTTP工作過程
  • 地址解析

    • 將url解析出對應的內容

        scheme:協議(例如:http, http, ftp)
            host:服務器的IP地址或者域名
            port:服務器的端口(如果是走協議默認端口,缺省端口80)
            path:訪問資源的路徑
            query-string:參數,發送給http服務器的數據
            anchor:錨(跳轉到網頁的指定錨點位置)
      
  • 封裝http請求數據包

    • 將上一步url解析出的內容封裝
  • 封裝成TCP包,建立TCP連接(TCP三次握手)
    -

  • 客戶端發送請求
    -

  • 服務器接收請求,發送響應
    -

  • 服務器關閉TCP連接


3. http請求和瀏覽器響應


  1. 當我們在瀏覽器輸入一個url,爲什麼可以加載出一個頁面?

  2. 爲什麼,在抓包的過程中,請求一個url,會出現很多的資源請求

  • 當我們在瀏覽器輸入一個url,客戶端會發送這個url對應的一個請求到指定的服務器獲取內容
  • 服務器收到這個請求,解析出對應的內容,之後將內容封裝到響應裏發送給客戶端。比如index.html頁面
  • 當客戶端拿到這個html頁面,會查看這個頁面中是否有css、js、images等url,如果有,再分別進行請求,獲取到這些內容
  • 客戶端會通過html的語法,將獲取到的內容完美的顯示出來
    在這裏插入圖片描述

4. 客戶端請求


  • 組成部分:請求行、請求頭部、空行、請求數據
    在這裏插入圖片描述
    在這裏插入圖片描述

  • 請求方法get/post

    • get請求:
      • get,獲取------->從服務器上獲取資源------->通過參數來告訴你服務器獲取什麼資源------>請求參數是在url裏面用&進行拼接的,也就是?後面的內容。------>所以不安全------->傳輸大小受限(url受限)
    • post請求:
      • post,傳遞------->向服務器傳遞數據-------->數據是封裝在請求的實體(請求數據)------->可以傳遞更多的內容(大小不受限)-------->更安全
    • get和post的區別
      • get是從服務器獲取內容,post是向服務器傳遞內容
      • get不安全,因爲參數拼在url後面。post比較安全,因爲參數是放在實體裏面的
      • get傳參大小受限,post不受限
  • 重要的請求頭
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述

    • User-Agent:客戶端請求標識。
      Accept: (傳輸文件類型)允許傳入的文件類型。
      Referer :表明產生請求的網頁來自於哪個URL,用戶是從該Referer頁面訪問到當前請求的頁面。
      cookie (cookie):在做登錄的時候需要封裝這個頭。
      Content-Type (POST數據類型)
      

5. 服務端響應


  • 組成:狀態行、消息報頭、空行、響應正文
    在這裏插入圖片描述

  • 重要的響應頭

    • Content-Type:text/html;charset=UTF-8:告訴客戶端,資源文件的類型,還有字符編碼
      -
      在這裏插入圖片描述
      在這裏插入圖片描述
  • 響應狀態碼
    -

  • cookie和session
    -


6. hash實現加密文件和加密字符串


  • 加密文件
    在這裏插入圖片描述

  • 加密字符串

在這裏插入圖片描述


7. 遞歸實現斐波那契和列表最大最小數


  • 遞歸斐波那契
def dg(n):

	if n==1 or n==2:
		return 1
	return dg(n-1)+dg(n-2)
n = int(input("請輸入一個數n:"))
print(dg(n))

  • 用遞歸的方法,獲取一個列表的最大值和最小值
a=[1,43,6,4,7,9,0,59]
max,min = a[0],a[0]
def dg(n,max,min):    
	if len(a)== 1:        
		return max,min    
	else:        
		num = a.pop()        
		if num >= max:            
			max = num        
		else:            
			max = max        
		if num <= min:            
			min = num        
		else:            
			min = min        
		return dg(len(a),max,min)
print(dg(len(a),max,min))
發佈了107 篇原創文章 · 獲贊 43 · 訪問量 7075
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章