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

python 3.x 爬蟲基礎

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

python 3.x 爬蟲基礎---Urllib詳解

python 3.x 爬蟲基礎---Requersts,BeautifulSoup4(bs4)

python 3.x 爬蟲基礎---正則表達式

前言 

  上一篇文章?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詳解

  向訪問網站提供你所使用的瀏覽器類型及版本、操作系統及版本、瀏覽器內核、等信息的標識。通過這個標識,用戶所訪問的網站可以顯示不同的排版從而為用戶提供更好的體驗或者進行信息統計;例如用手機訪問谷歌和電腦訪問是不一樣的,這些是谷歌根據訪問者的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中的一些庫也可以實現),詳情請了解http.cookiejar,python 3.x 爬蟲基礎---Urllib詳解有提及。

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

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

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

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

Origin:Origin字段里只包含是誰發起的請求,并沒有其他信息。跟Referer不一樣的 是Origin字段并沒有包含涉及到用戶隱私的URL路徑和請求內容,這個尤其重要。

并且Origin字段只存在于POST請求,而Referer則存在于所有類型的請求;

結語

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

?

轉載于:https://www.cnblogs.com/kmonkeywyl/p/8435533.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/250948.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/250948.shtml
英文地址,請注明出處:http://en.pswp.cn/news/250948.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Webpack進階(三)

懶加載 lazy loading 用到的時候才加載vue 首屏不加載index.js const oBtn document.getElementById(j-button) oBtn.onclick async function () {const div await createElement()document.body.appendChild(div) } async function createElement() {const { default: _ …

P2634 [國家集訓隊]聰聰可可

鏈接:https://www.luogu.org/problemnew/show/P2634 題目描述 聰聰和可可是兄弟倆,他們倆經常為了一些瑣事打起來,例如家中只剩下最后一根冰棍而兩人都想吃、兩個人都想玩兒電腦(可是他們家只有一臺電腦)……遇到這種問…

算法 --- 快慢指針判斷鏈表是否有環

解題思路: 分別設置2個指針(s,q)指向鏈表的頭部,s每次指向下面一個(s s.next),q每次指向下面2個(q q.next.next). 如果存在環,q總會在某一時刻追上s /*** Definition for singly-linked list.* function ListNode(val) {* this.val val;* this.next null;* }*//**…

APP拉起小程序

結論:APP可以喚起小程序,前提是APP開發者在微信開放平臺帳號下申請移動應用,通過審核并關聯小程序,參考如下: 準備工作: APP開發者認證微信開放平臺 https://kf.qq.com/faq/170824URbmau170824r2uY7j.html APP開發者…

node --- 使用nrm改變npm的源

說明: 1.nrm只是單純的提供了幾個常用的下載包的URL地址,方便我們再使用npm裝包是 很方便的進行切換. 2.nrm提供的cnpm 和通過 cnpm裝包是2個不同的東西(使用cnpm install必須先安裝cnpm -> npm install -g cnpm) 安裝nrm: // linux $ [sudo] npm install --global nrm// w…

MySQL教程(三)—— MySQL的安裝與配置

1 安裝MySQL 打開附件中的文件(分別對應電腦系統為32/64位)。點next。 三個選項,分別對應典型安裝、自定義安裝和完全安裝,在此選擇典型安裝(初學者)。 點install。 廣告,忽略它。 安裝完成…

算法面經之百度

一、百度 前言:本來不打算寫百度面筋的,因為二面表現自我感覺實在太差了,像是被生活抽了一記耳光,不愿再去揭傷疤,奈何,半個月過去了,昨天又被百度從備胎池拉出來涮了一遍,涮的時候也…

flask-session總結

一、session session和cookie的原理和區別: cookie是保存在瀏覽器上的鍵值對 session是存在服務端的鍵值對(服務端的session就是一個大字典,字典中是隨機字符串)(session與request原理相同)&am…

c++ --- 字符串中的標點符號

題外話: 最近看node,發現node中好多強大的功能都設計到C,為了加深對node的理解,開始簡單的學習一下C語法 ispunct: 統計string對象中標點符號的個數 #include <iostream> using namespace std; int main () {string s ("Hello World!");decltype(s.size()) p…

Hadoop(5)-Hive

在Hadoop的存儲處理方面提供了兩種不同的機制&#xff0c;一種是之前介紹過的Hbase&#xff0c;另外一種就是Hive&#xff0c;有關于Hbase&#xff0c;它是一種nosql數據庫的一種&#xff0c;是一種數據庫&#xff0c;基于分布式的列式存儲&#xff0c;適合海量數據的操作&…

高精——模板

紫書&#xff1a; #include <iostream> #include <string> #include <cstring> #include <cstdio> using namespace std; const int maxn 1000; struct bign{ int d[maxn], len; void clean() { while(len > 1 && !d[len-1]) …

認識及實現MVC

gitee M&#xff1a;Model 數據模型&#xff08;模型層&#xff09;→ 操作數據庫&#xff08;對數據進行增刪改查&#xff09; V&#xff1a;View視圖層 → 顯示視圖或視圖模板 C&#xff1a;Controller 控制器層 → 邏輯層 數據和視圖關聯掛載和基本的邏輯操作 API層 前端請…

算法 --- 翻轉二叉樹

解(C): 1.二叉樹判空 if(root 0) 或 if(root nullptr); 2.二叉樹的左子樹: root->left . 3.使用遞歸,將當前根節點的左右指針指向互換左向右子樹(此時右子樹也進行了翻轉) // C /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode…

float 常見用法與問題--摘抄

float 屬性絕對是眾多切圖仔用的最多的 CSS 屬性之一&#xff0c;它的用法很簡單&#xff0c;常用值就 left、right、none 三個&#xff0c;但是它的特性你真的弄懂了嗎&#xff1f; 我會在這里介紹我對 float 的認識與使用&#xff0c;以及使用過程中遇到的問題。 對 float 的…

javascipt -- find方法和findIndex方法的實現

find: 根據傳入的條件函數,返回符合條件的第一項 var arr [{id: 1, name: zs, age: 18},{id: 2, name: zs, age: 17},{id: 3, name: ls, age: 16},{id: 4, name: ls, age: 15}]Array.prototype._find_ function(cb){for(var i0; i< this.length; i){if(cb(this[i],i)){ret…

bzoj 2179 FFT快速傅立葉 FFT

題面 題目傳送門 解法 題如其名…… 不妨將多項式的\(x^i\)變成\(10^i\)&#xff0c;然后就是一個比較簡單的FFT了 md讀進來的是一個字符串&#xff0c;并且要倒序 最后注意進位問題 時間復雜度&#xff1a;\(O(n\ log\ n)\) 代碼 #include <bits/stdc.h> #define N 1 &l…

【探討】javascript事件機制底層實現原理

前言 又到了扯淡時間了&#xff0c;我最近在思考javascript事件機制底層的實現&#xff0c;但是暫時沒有勇氣去看chrome源碼&#xff0c;所以今天我來猜測一把 我們今天來猜一猜&#xff0c;探討探討&#xff0c;javascript底層事件機制是如何實現的 博客里面關于事件綁定與執行…

node --- 在node中使用mongoosemongoDB的安裝

*首先確保,你的電腦安裝了mongodb,網址: mongodb官網 *使用npm安裝 mongoose: mongoose官網 ps:mongoose是Node中操作mongoDB的第三方插件.用于提高數據庫操作效率(相當于在mongoDB上封裝了一次,暴露出更友好的API) MongoDB的安裝 1.下載地址 2.下載好了后,傻瓜式的安裝(我的…

websocket demo

git node.js創建websocket 的服務 Nodejs Websocket包 ws.createServer([options], [callback]) The callback is a function which is automatically added to the “connection” event. 前端代碼 1. 創建實例、打開連接 this.websocket new WebSocket(ws://127.0.0.1:80…

shell常用命令總結總結

打rpm包&#xff1a; rpmbuild -bb SPECS/smplayer.spec --define "_topdir pwd" 安裝rpm包&#xff1a; rpm -ivh [rpm包文件] 如果安裝不上 rpm -ivh [rpm包文件] --force #強制安裝 打包的時候可能需要一些依賴&#xff1a; dnf install 【依賴文件名】 sed -i常用…