本文目錄一覽:
- 1、Python爬蟲之Header
- 2、如何使用python解決網站的反爬蟲
- 3、Python爬蟲雜記 – POST之multipart/form-data請求
- 4、python爬蟲前奏
- 5、如何在每個url前加上http:爬蟲python
- 6、全方面的掌握Requests庫的使用【python爬蟲入門進階】(02)
Python爬蟲之Header
HTTP 「請求頭信息」 Request Header 是向服務端提供客戶端的信息,「響應頭信息」 Response Header 是服務端向客戶端提供請求文檔信息或伺服器的狀態信息,服務端判斷服務端的身份,就是通過 Header 來判斷的,所以爬蟲通過設置 Header 來隱藏自己相當重要。
一個完整的HTTP請求包含以下部分:
請求方法 URL HTTP版本
請求頭信息
請求數據
一個空行,請求的結束行
常見的請求頭:
Accept :客戶端接收的數據類型,如:Accept:text/html
User Agent :客戶端軟體類型
Authorization :認證消息,包括用戶名和口令
Referer :用戶獲取的Web頁面
真實的請求頭信息會更多,下面是豆瓣某短評的真實請求頭:
一個完整的HTTP響應包含以下部分:
狀態行
響應頭
響應數據
常見的狀態行:
更多狀態碼查看: HTTP狀態碼
常見的響應頭:
Server :Web伺服器程序的信息
Date :當前伺服器的日期和時間
Last Modified :請求文檔最近一次修改的時間
Expires :請求文檔過期時間
Content-length :數據長度(位元組)
Content-type :數據MIME類型
WWW-authenticate :用於通知客戶方需要的認證信息,如用戶名,口令等
下面是豆瓣某短評的真實響應頭:
Python使用Requests來請求的時候,如果沒有設置Header,Header是空的,設置Header的方法如下:
如何使用python解決網站的反爬蟲
1、從用戶請求的Headers反爬蟲是最常見的反爬蟲策略。
偽裝header。很多網站都會對Headers的User-Agent進行檢測,還有一部分網站會對Referer進行檢測(一些資源網站的防盜鏈就是檢測Referer)。如果遇到了這類反爬蟲機制,可以直接在爬蟲中添加Headers,將瀏覽器的User-Agent複製到爬蟲的Headers中;或者將Referer值修改為目標網站域名[評論:往往容易被忽略,通過對請求的抓包分析,確定referer,在程序中模擬訪問請求頭中添加]。對於檢測Headers的反爬蟲,在爬蟲中修改或者添加Headers就能很好的繞過。
2、基於用戶行為反爬蟲
還有一部分網站是通過檢測用戶行為,例如同一IP短時間內多次訪問同一頁面,或者同一賬戶短時間內多次進行相同操作。[這種防爬,需要有足夠多的ip來應對]
(1)、大多數網站都是前一種情況,對於這種情況,使用IP代理就可以解決。可以專門寫一個爬蟲,爬取網上公開的代理ip,檢測後全部保存起來。有了大量代理ip後可以每請求幾次更換一個ip,這在requests或者urllib中很容易做到,這樣就能很容易的繞過第一種反爬蟲。
編寫爬蟲代理:
步驟:
1.參數是一個字典{‘類型’:’代理ip:埠號’}
proxy_support=urllib.request.ProxyHandler({})
2.定製、創建一個opener
opener=urllib.request.build_opener(proxy_support)
3a.安裝opener
urllib.request.install_opener(opener)
3b.調用opener
opener.open(url)
用大量代理隨機請求目標網站,應對反爬蟲
Python爬蟲雜記 – POST之multipart/form-data請求
原以為requests請求十分強大, 但遇到了模擬multipart/form-data類型的post請求, 才發現requests庫還是有一丟丟的不足。 不過也可能是我理解的不足, 還希望讀者老爺不吝指教! 在此感謝!
enctype屬性:
enctype:規定了form表單在發送到伺服器時候編碼方式,它有如下的三個值。
①application/x-www-form-urlencoded:默認的編碼方式。但是在用文本的傳輸和MP3等大型文件的時候,使用這種編碼就顯得 效率低下。
②multipart/form-data:指定傳輸數據為二進位類型,比如圖片、mp3、文件。
③text/plain:純文體的傳輸。空格轉換為 「+」 加號,但不對特殊字元編碼。
值得注意的是:請求頭的Content-Type屬性與其他post請求的不同
總註:上邊這兩種構建參數的方式各有不同, 用起來感覺並不是那麼的靈活,所以感嘆requests有那麼一丟丟丟的不足。值的注意的是,requests.post中files參數接收字典的形式和encode_multipart_formdata中params參數接收字典形式的區別!人生苦短……
python爬蟲前奏
在瀏覽器中發送http請求的過程:
1.當用戶在瀏覽器地址欄輸入URL並按回車鍵時,瀏覽器會向HTTP伺服器發送HTTP請求。HTTP請求主要分為「獲取」和「發布」兩種方法。
2.當我們輸入網址htp://www百度。com在瀏覽器中,瀏覽器發送Request請求獲取HTP/www Baidu.com的html文件,伺服器將Response文件對象發回瀏覽器。
3.瀏覽器分析響應中的HTML,發現它引用了很多其他文件,比如Images文件、CSS文件、JS文件。瀏覽器會自動再次發送一個獲取圖片、CSS文件或JS文件的請求。
4.當所有文件下載成功後,網頁將完全按照HTML語法結構顯示。
#url解釋:
URL是統一資源定位符的縮寫,統一資源定位符。
網址由以下部分組成:
scheme://host:port/path/ query-string = XXX # ancho
方案:表示訪問的協議,如http或https、ftp等。
主機:主機名、域名,如。
埠:埠號。當您訪問網站時,瀏覽器默認使用埠80。
路徑:找到路徑。例如,在,,以下趨勢/現在是路徑。
查詢字元串:查詢字元串,如?. Wd=python,後跟Wd = python,是搜索字元串。
錨點:錨點,背景一般忽略,前端用於頁面定位。
瀏覽器中的一個ufl,瀏覽器將對這個url進行編碼。除了英文字母、數字和一些符號之外,所有其他符號都用百分號加上十六進位代碼值進行編碼。
#請求頭通用參數:
在http協議中,當向伺服器發送請求時,數據被分成三部分。第一個是把數據放在url中,第二個是把數據放在正文中(在post請求中),第三個是把數據放在頭部。這裡,我們介紹一些經常在網路爬蟲中使用的請求頭參數:
用戶代理:瀏覽器名稱。這通常用於網路爬蟲。當請求網頁時,伺服器可以通過這個參數知道哪個瀏覽器發送了請求。如果我們通過爬蟲發送請求,那麼我們的用戶代理就是Python。對於那些有反爬蟲機制的網站,很容易判斷你的請求是爬蟲。因此,我們應該始終將此值設置為某些瀏覽器的值,以偽裝我們的爬蟲。
引用者:指示當前請求來自哪個網址。這也可以作為反爬蟲技術。如果不是來自指定頁面,則不會做出相關響應。
http協議是無狀態的。也就是說,同一個人發送了兩個請求,伺服器無法知道這兩個請求是否來自同一個人。因此,此時使用cookie進行標識。一般來說,如果你想成為一個登錄後才能訪問的網站,你需要發送cookie信息。
常見的請求方法有:
在Http協議中,定義了八種請求方法。這裡介紹兩種常見的請求方法,即get請求和post請求。
Get request:一般來說,get request只在從伺服器獲取數據時使用,不會對伺服器資源產生任何影響。
發布請求:發送數據(登錄)、上傳文件等。,並在會影響伺服器資源時使用post請求。
這是網站開發中常用的兩種方法。並且一般會遵循使用原則。然而,為了成為一個反爬蟲機制,一些網站和伺服器經常出於常識玩牌。應該使用get方法的請求可能必須更改為post請求,這取決於具體情況。
常見響應狀態代碼:
00:請求正常,伺服器正常最近數據。
31:永久重定向。例如,當您訪問時,您將被重定向到。
32:臨時重定向。例如,當訪問需要登錄的頁面時,此時沒有登錄,您將被重定向到登錄頁面。
400:在伺服器上找不到請求的網址。換句話說,盾請求ur1錯誤。
403:伺服器拒絕訪問,許可權不足。
50:伺服器內部錯誤。可能是伺服器有bug。
如何在每個url前加上http:爬蟲python
1請求行 最開始GET 開頭的一串,GET表示請求方式,後面跟的是請求參數、HTTP協議及版本號
2請求頭Request Headers Network——點擊url地址——點擊headers:找到Request Headers,點擊view source。
python是一種程序語言
全方面的掌握Requests庫的使用【python爬蟲入門進階】(02)
上一篇文章簡單的介紹了 爬蟲相關的基礎知識點,介紹了一個標準爬蟲程序的三個步驟 。這篇文章就讓我們接著來學習。
本文重點介紹requests庫的使用以及爬蟲協議。之前也寫了一篇 Requests庫使用的博客 ,有興趣的小夥伴可以去看看。
前面介紹了Requests庫是用來抓取網頁源碼,請求介面的利器,整體上是要比urllib庫的request更加好用的庫。官網上將其稱之為唯一一個非轉基因的Python HTTP庫,人類可以安全享用。
Requests庫有7個主要方法。
不過我們平常最常用的方法還是GET方法和POST方法。
get請求方法是爬蟲中最常用到的方法,因為爬蟲主要就是爬取網頁的信息。最基礎的使用是
這裡需要通過 res.encoding=’utf-8′ 設置響應結果的編碼格式是utf-8。不然可能會出現中文亂碼
如果響應結果是二進位數據的話則需要通過 res.content 方法來提取響應結果。
設置編碼的方式也可以是 res.content.decode(‘utf-8’) 。
即
有時候get請求也需要傳入參數,這裡可以直接將參數拼接到URL上或者通過params參數傳入一個字典。
運行結果是:
get請求只能傳入簡單的參數,如果參數比較複雜或者傳入的參數比較多的話則GET請求就不再適用了,這時候就需要適用post請求方法了。
Post請求的請求類型有三種:
以表單的方式提交數據是POST請求的默認的請求格式,只需要將參數放在一個字典中進行傳入即可。
這裡將請求頭的數據放在一個名為header的字典中,然後在請求時通過headers參數傳入。在請求中設置了內容類型是 application/json ,編碼格式是 charset=utf-8
傳入的是一個json字元串,通過data參數進行傳入。json字元串可以直接寫也可以通過 json.dumps(dict) 方法將一個字典序列化,就像下面這樣。
文件上傳與本節爬蟲的內容無關,在此就不過多介紹了。有興趣的小夥伴可以看看 Python中如何編寫介面,以及如何請求外部介面 這篇文章。
在網路請求中,我們常常會遇到狀態碼是3開頭的重定向問題,在Requests中是默認開啟允許重定向的,即遇到重定向時,會自動繼續訪問。通過將allow_redirects 屬性設置為False不允許重定向。
通過timeout屬性可以設置超時時間,單位是秒。get方法和post方法均可設置。
通過status_code屬性可以獲取介面的響應碼。
有時候我們使用了抓包工具,這時候由於抓包證書提供的證書並不是受信任的數字證書頒發機構頒發的,所以證書的驗證會失敗,所以我們就需要關閉證書驗證。在請求的時候把verify參數設置為False就可以關閉證書驗證了。
爬蟲協議也叫做robots協議,告訴網路蜘蛛哪些頁面可以爬取,哪些頁面不能爬取
爬蟲文件的規範是:
允許所有的機器人
本文詳細介紹了Request庫的使用
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/247353.html