python 3.x 爬蟲基礎---http headers詳解

來源:互聯網
上載者:User

標籤:presto   隱私   cache   use   操作   代理服務   center   alt   encoding   

前言 

  上一篇文章 python 爬蟲入門案例----爬取某站上海租房圖片 中有對headers的講解,可能是對爬蟲瞭解的不夠深刻,所以老覺得這是一項特別簡單的技術,也可能是簡單所以網上對爬蟲系統的文檔,書和視頻感覺都好少,故此準備接下這段時間對爬蟲涉及到的點做個系統的學習與總結。

利用瀏覽器查看headers

開啟瀏覽器,按F12(開發調試工具)------》查看網路工作(Network)------》選擇你訪問的頁面地址------》headers。就可以看到你想要的資訊,如(【白眼】這些有點開發基礎的應該都知道吧)

我們可以看出heades包含(通用)request headers(請求) 與response headers(響應)。從名字上我們大概就能知道它們相應的作用是什麼吧。這一塊知識可以去學習http 協議去瞭解,記得以前買過一本書叫做《圖解http》,有興趣的看一去看一下。

request headers

  爬蟲第一步應該就是要擷取頁面資訊,但是那往往別人是不想讓你爬它們的網站的至於為什嗎?請用腳指頭想一想,其實我以前的項目也做過防止爬蟲的功能,net mvc防網路攻擊案例 ,那麼存在壓迫就會有反抗,其中反爬蟲的方式headers的偽造就是第一步。其中我主要提一下Host,Connection,Accept,Accept-Encoding,Accept-Language,User-Agent,Referrer這7個要求標頭。

Host詳解

  大家應該知道host是在http1-1之後才有的,也就是以前沒有host只存在ip網站也是能夠正常啟動並執行,但是為什要加入host的呢。

  如我們去ping host。host:csblogs.com 對應的ip是104.27.132.253,那麼我在這就要問了,有沒有可能blogs.com也對應104.27.132.253這個ip地址?答案是肯定的,做過web開發的人員應該都在自己電腦上部署過多個web網站。只需要我們用不同的連接埠就行。是的host就是網域名稱嗎。他主要就是實現一對多的功能。一台虛擬機器主機上的一個ip可以放成千上萬個網站。當對這些網站的請求到來時,伺服器根據Host這一行中的值來確定本次請求的是哪個具體的網站,就是網域名稱解析。

Connection詳解

  如有沒有發現請求與相應都存在Connection,那麼它到底有什麼用呢?控制HTTP C/S直接是否可以進行長串連。HTTP1.1規定了預設保持長串連,但是python爬蟲的時候有可能會出現短連結。那麼什麼是長串連?

  資料轉送完成了保持TCP串連不斷開(不發RST包、不四次握手),等待在同網域名稱下繼續用這個通道傳輸資料;相反的就是短串連。

其中一下可以對其進行簡單的設定,進行傳遞。

Connection: Keep-alive#長串連Connection:close#短連結
Keep-Alive: timeout=20#tcp通道保持20s
Accept詳解

  指定用戶端能夠接受的內容類型,在這唯一要提醒的就是它只是建議伺服器,而並非就是你寫成什麼他就返回給你什麼。

Accept-Encoding詳解

  瀏覽器發給伺服器,聲明瀏覽器支援的編碼類別型的。

Accept-Encoding: compress, gzip              //支援compress 和gzip類型 Accept-Encoding:                        //預設是identity Accept-Encoding: *                       //支援所有類型 Accept-Encoding: compress;q=0.5, gzip;q=1.0      //按順序支援 gzip , compress Accept-Encoding: gzip;q=1.0, identity; q=0.5, *;q=0  // 按順序支援 gzip , identity 
Accept-Language詳解

  要求標頭允許用戶端聲明它可以理解的自然語言,以及優先選擇的地區方言。

Accept-Language: Zh-CN, zh;q=0.8, en-gb;q=0.8, en;q=0.7#最佳語言為中文-中國(預設權重為1),其次為中文,權重為0.8,再次為英國英語,權重為0.8,最後為通用英語,權重0.7
user_agent詳解

  向訪問網站提供你所使用的瀏覽器類型及版本、作業系統及版本、瀏覽器核心、等資訊的標識。通過這個標識,使用者所訪問的網站可以顯示不同的排版從而為使用者提供更好的體驗或者進行資訊統計;例如用手機訪問Google和電腦訪問是不一樣的,這些是Google根據訪問者的UA來判斷的,這個應該所有接觸爬蟲不管不知道它什麼意思都會用到它,因為如果沒有它,大部分都會沒反應。

#user_agent 集合user_agent_list = [ ‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ‘  ‘Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3‘, ‘Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50‘, ‘Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50‘, ‘Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)‘, ‘Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)‘, ‘Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1‘, ‘Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11‘, ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11‘, ‘Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)‘, ‘Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0‘, ‘Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1‘,]#隨機播放一個 user_agent = random.choice(user_agent_list)#傳遞給header#headers = { ‘User-Agent‘: user_agent }

為什麼要隨機傳遞一個不行嗎?其實大部分時候我都是用一個。其實就是你偽造的越不想爬蟲就越是越好的爬蟲。

Referer詳解

  當瀏覽器向web伺服器發送請求的時候,一般會帶上Referer,告訴伺服器我是從哪個頁面連結過來的,伺服器籍此可以獲得一些資訊用於處理。用於統計訪問量、防外串連等。這個怎麼說呢,就是你如果你想查看去看有沒有火車票,那麼你就要先登入12306網站。

# 對付“反盜鏈”(伺服器會識別headers中的referer是不是它自己,如果不是則不響應),構建以下headers  headers = {"User-Agent": "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)",  "Referer": "https://www.cnblogs.com"}                
其他

Authorization:授權資訊,通常出現在對伺服器發送的WWW-Authenticate頭的應答中;

Cookie:這是最重要的要求標頭資訊之一;一般可以直接複製,對於一些變化的可以選擇構造(python中的一些庫也可以實現)

    (這個我準備單獨介紹

From:請求寄件者的email地址,由一些特殊的Web客戶程式使用,瀏覽器不會用到它;

If-Modified-Since:只有當所請求的內容在指定的日期之後又經過修改才返回它,否則返回304“Not Modified”應答;

Pragma:指定“no-cache”值表示伺服器必須返回一個重新整理後的文檔,即使它是Proxy 伺服器而且已經有了頁面的本地拷貝;

UA-Pixels,UA-Color,UA-OS,UA-CPU:由某些版本的IE瀏覽器所發送的非標準的要求標頭,表示螢幕大小、色彩深度、作業系統和CPU類型。

Origin:Origin欄位裡只包含是誰發起的請求,並沒有其他資訊。跟Referer不一樣的 是Origin欄位並沒有包含涉及到使用者隱私的URL路徑和請求內容,這個尤其重要。

並且Origin欄位只存在於POST請求,而Referer則存在於所有類型的請求;

結語

  那麼就先寫到這裡了,上篇文章說春節前最後一篇,結果沒壓抑住,在這就祝大家新年快樂了。來年大家一起努力吧。

 

python 3.x 爬蟲基礎---http headers詳解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.