python日記Day20——網絡爬蟲之requests庫

python日記——網絡爬蟲之requests庫

  • 網絡爬蟲與信息提取流程圖
    在這裏插入圖片描述
  • HTTP協議
    1、HTTP,Hypertext Transfer Protocol,超文本傳輸協議,HTTP是一個基於“請求與響應”模式的、無狀態的應用層協議,HTTP協議採用URL作爲定位網絡資源的標識,URL格式如下:http://host[:port][path]
    host: 合法的Internet主機域名或IP地址
    port: 端口號,缺省端口爲80
    path: 請求資源的路徑
    2、HTTP協議對資源的操作:
    在這裏插入圖片描述
  • Requests庫入門
    1、Requests庫的七個主要方法
    在這裏插入圖片描述
    requests.request(method, url, *kwargs) 方法是requests庫其餘六個方法的基礎,它們都是通過requests.request()封裝而成,因此,掌握requests.request()方法便可以掌握其餘六種方法:
    ∙ method : 請求方式,對應get/put/post等7種
    ∙ url : 擬獲取頁面的url鏈接
    ∙ *kwargs: 控制訪問的參數,共13個
    (1)params : 字典或字節序列,作爲參數增加到url中
    (2)data : 字典、字節序列或文件對象,作爲Request的內容
    (3)json : JSON格式的數據,作爲Request的內容
    (4)headers : 字典,HTTP定製頭
    (5)cookies : 字典或CookieJar,Request中的cookie
    (6)auth : 元組,支持HTTP認證功能
    (7)files : 字典類型,傳輸文件
    (8)timeout : 設定超時時間,秒爲單位
    (9)proxies : 字典類型,設定訪問代理服務器,可以增加登錄認證
    (10)allow_redirects : True/False,默認爲True,重定向開關
    (11)stream : True/False,默認爲True,獲取內容立即下載開關
    (12)verify : True/False,默認爲True,認證SSL證書開關
    (13)cert : 本地SSL證書路徑
    2、Requests庫的2個重要對象
    在這裏插入圖片描述
    Response對象的屬性:
    在這裏插入圖片描述
    注意:
    r.encoding:如果header中不存在charset,則認爲編碼爲ISO‐8859‐1,r.text根據r.encoding顯示網頁內容;
    r.apparent_encoding:根據網頁內容分析出的編碼方式,可以看作是r.encoding的備選。
    3、爬取網頁的通用代碼框架
    網絡連接有風險,異常處理很重要
    (1)理解Requests庫的異常:
    在這裏插入圖片描述
    r.raise_for_status()在方法內部判斷r.status_code是否等於200,不需要
    增加額外的if語句,該語句便於利用try‐except進行異常處理
    (2)通用代碼框架:
    在這裏插入圖片描述
  • 網絡爬蟲的“盜亦有道”
    1、網絡爬蟲的尺寸:
    在這裏插入圖片描述
    2、網絡爬蟲引發的問題:
    性能騷擾、法律風險、隱私泄露
    3、網站如何限制網絡爬蟲:
    (1)來源審查:判斷User‐Agent進行限制
    檢查來訪HTTP協議頭的User‐Agent域,只響應瀏覽器或友好爬蟲的訪問
    (2)發佈公告:Robots協議
    作用:網站告知網絡爬蟲哪些頁面可以抓取,哪些不行
    形式:在網站根目錄下的robots.txt文件
    在這裏插入圖片描述
  • 爬蟲案例:

1、入門案例

import requests as rq
url = 'https://www.baidu.com/'
try:
    r = rq.get(url)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    print(r.text[0:500])
except:
    print("發生異常!")

2、修改頭部信息隱藏自身,防止被ban

 kv = {'user-agent':'Mozilla/5.0'}
 r = rq.get(url,header=kv)

3、根據url接口傳入對應參數
百度的關鍵詞接口:
http://www.baidu.com/s?wd=keyword
360的關鍵詞接口:
http://www.so.com/s?q=keyword

kv = {'wd':'python'}
r = rq.get(url,params=kv)

4、圖片抓取:

import requests as rq
import os
url = 'http://image.nationalgeographic.com.cn/2017/0211/20170211061910157.jpg'
path = 'D://Temp//abc.jpg'
try:
    r = rq.get(url)
    r.raise_for_status()
    with open(path,'wb') as f:
       f.write(r.content)#圖片以二進制形式保存
       f.close()
       print("文件保存成功!")
except:
    print("發生異常!")

本文部分內容參考於北京理工大學嵩天老師相關課程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章