這應該是2018年最詳細的python爬蟲入門教程了!

這應該是2018年最詳細的python爬蟲入門教程了!

Python against futuristic black and blue

爬蟲入門(私信小編007即可自動獲取大量Python視頻教程以及各類PDF!)

爬蟲(又被稱為網頁蜘蛛,網絡機器人)就是模擬客戶端發送網絡請求,接收請求響應,一種按照一定的規則,自動地抓取互聯網信息的程序。

原則上,只要是瀏覽器(客戶端)能做的事情,爬蟲都能夠做。

根據被爬網站的數量的不同,我們把爬蟲分為:

  • 通用爬蟲 :通常指搜索引擎的爬蟲
  • 聚焦爬蟲 :針對特定網站的爬蟲

Robots協議:網站通過Robots協議告訴搜索引擎哪些頁面可以抓取,哪些頁面不能抓取,但它僅僅是道德層面上的約束。

瀏覽器會主動請求js,css等內容,js會修改頁面的內容,js也可以重新發送請求,最後瀏覽器渲染出來的內容在elements中,其中包含css,圖片,js,url地址對應的響應等。

但是在爬蟲中,爬蟲只會請求url地址,對應的拿到url地址對應的響應。瀏覽器渲染出來的頁面和爬蟲請求的頁面並不一樣。所以在爬蟲中,需要以url地址對應的響應為準來進行數據的提取。

url的形式:scheme://host[:port#]/path/…/[?query-string][#anchor]

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

HTTP:超文本傳輸協議,默認端口號:80

HTTPS:HTTP + SSL(安全套接字層),默認端口號:443 (HTTPS比HTTP更安全,但是性能更低)

HTTP常見請求頭

  1. Host (主機和端口號)
  2. Connection (鏈接類型)
  3. Upgrade-Insecure-Requests (升級為HTTPS請求)
  4. User-Agent (瀏覽器名稱)
  5. Accept (傳輸文件類型)
  6. Referer (頁面跳轉處)
  7. Accept-Encoding(文件編解碼格式)
  8. Cookie (Cookie)
  9. x-requested-with :XMLHttpRequest (是Ajax 異步請求)

常見的請求方法

  • GET
  • POST

有關 GET 請求的其他一些註釋:

  • GET 請求可被緩存
  • GET 請求保留在瀏覽器歷史記錄中
  • GET 請求可被收藏為書籤
  • GET 請求不應在處理敏感數據時使用
  • GET 請求有長度限制
  • GET 請求只應當用於取回數據

有關 POST 請求的其他一些註釋:

  • POST 請求不會被緩存
  • POST 請求不會保留在瀏覽器歷史記錄中
  • POST 不能被收藏為書籤
  • POST 請求對數據長度沒有要求
這應該是2018年最詳細的python爬蟲入門教程了!

響應狀態碼(status code)

常見的狀態碼:

  • 200:成功
  • 302:臨時轉移至新的url
  • 307:臨時轉移至新的url
  • 404:not found
  • 500:服務器內部錯誤

代理IP的分類:

透明代理(Transparent Proxy),透明代理雖然可以直接“隱藏”你的IP地址,但是還是可以從HTTP_X_FORWARDED_FOR來查到你是誰。

匿名代理(Anonymous Proxy),匿名代理比透明代理進步了一點:別人只能知道你用了代理,無法知道你是誰。

混淆代理(Distorting Proxies),與匿名代理相同,如果使用了混淆代理,別人還是能知道你在用代理,但是會得到一個假的IP地址,偽裝的更逼真。

高匿代理(Elite proxy或High Anonymity Proxy),高匿代理讓別人根本無法發現你是在用代理,所以是最好的選擇。

Scrapy是一個為了爬取網站數據,提取結構性數據而編寫的應用框架,我們只需要實現少量的代碼,就能夠快速的抓取。

Scrapy 使用了Twisted['twɪstɪd]異步網絡框架,可以加快我們的下載速度。

這應該是2018年最詳細的python爬蟲入門教程了!

  • 異步:調用在發出之後,這個調用就直接返回,不管有無結果
  • 非阻塞:關注的是程序在等待調用結果(消息,返回值)時的狀態,指在不能立刻得到結果之前,該調用不會阻塞當前線程。

scrapy的流程

這應該是2018年最詳細的python爬蟲入門教程了!

從上圖可以衍生出下圖,個人覺得更加好理解一些

這應該是2018年最詳細的python爬蟲入門教程了!

其流程可以描述如下:

  1. 調度器把requests-->引擎-->下載中間件--->下載器
  2. 下載器發送請求,獲取響應---->下載中間件---->引擎--->爬蟲中間件--->爬蟲
  3. 爬蟲提取url地址,組裝成request對象---->爬蟲中間件--->引擎--->調度器
  4. 爬蟲提取數據--->引擎--->管道
  5. 管道進行數據的處理和保存

scrapy中每個模塊的具體作用:

這應該是2018年最詳細的python爬蟲入門教程了!

scrapy項目實現流程:

  • 創建一個scrapy項目:scrapy startproject +
  • 生成一個爬蟲:scrapy genspider + +
  • 提取數據:完善spider,使用xpath等方法
  • 保存數據:pipeline中保存數據
scrapy.cfg :項目的配置文件
mySpider/ :項目的Python模塊,將會從這裡引用代碼
mySpider/items.py :項目的目標文件
mySpider/pipelines.py :項目的管道文件
mySpider/settings.py :項目的設置文件
mySpider/spiders/ :存儲爬蟲代碼目錄

認識scrapy的debug信息

每次程序啟動後,默認情況下,終端都會出現很多的debug信息,那麼下面我們來簡單認識下這些信息

這應該是2018年最詳細的python爬蟲入門教程了!

scrapy shell的使用

  • response.url:當前響應的url地址
  • response.request.url:當前響應對應的請求的url地址
  • response.headers:響應頭
  • response.body:響應體,也就是html代碼,默認是byte類型
  • response.requests.headers:當前響應的請求頭

settings.py中的重點字段和內涵

  • USER_AGENT 設置ua
  • ROBOTSTXT_OBEY 是否遵守robots協議,默認是遵守
  • CONCURRENT_REQUESTS 設置併發請求的數量,默認是16個
  • DOWNLOAD_DELAY 下載延遲,默認無延遲
  • COOKIES_ENABLED 是否開啟cookie,即每次請求帶上前一次的cookie,默認是開啟的
  • DEFAULT_REQUEST_HEADERS 設置默認請求頭
  • SPIDER_MIDDLEWARES 爬蟲中間件,設置過程和管道相同
  • DOWNLOADER_MIDDLEWARES 下載中間件


分享到:


相關文章: