這應該是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常見請求頭

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

常見的請求方法

GETPOST

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

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

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

POST 請求不會被緩存POST 請求不會保留在瀏覽器歷史記錄中POST 不能被收藏為書籤POST 請求對數據長度沒有要求

響應狀態碼(status code)

常見的狀態碼:

200:成功302:臨時轉移至新的url307:臨時轉移至新的url404:not found500:服務器內部錯誤

代理IP的分類:

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

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

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

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

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

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

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

scrapy的流程

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

其流程可以描述如下:

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

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

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信息,那麼下面我們來簡單認識下這些信息

scrapy shell的使用

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

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

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