摘要:發送請求方不希望被跟蹤。主要用來將偽裝成一個正常的瀏覽器。該字典就是說是網絡協議名稱,是代理的。另外一般會明確指定資源存放的位置。意思是將現在提交的數據存放于下第篇。請求刪除某一個資源。向服務器提交數據。
前一個教程我們涉及到了urllib2的一些高級應用。這一片文章我們來比較系統的介紹一下。
Header該篇教程參考了靜覓的博文:http://cuiqingcai.com/954.html。
寫這篇文章的目的僅僅是加深自己的印象。
很多網站對我們用urllib2發起的請求進行辨別,所以我們需要對我們的請求做一定的偽裝。
我打開一個Chrome開發者工具的Network Tab。
查看一個Request Headers
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Encoding:gzip, deflate, sdch, br Accept-Language:zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4 Cache-Control:max-age=0 Connection:keep-alive Cookie:__jsluid=237f8e30a392dd2dc08dda3c008b89bc; editor-code-detect-disabled=1; PHPSESSID=web1~1f6bt88ejrrdj2mgchjgfhi3c5; _gat=1; _ga=GA1.2.1502881944.1485175337; Hm_lvt_e23800c454aa573c0ccb16b52665ac26=1485175337,1485352359,1485352371; Hm_lpvt_e23800c454aa573c0ccb16b52665ac26=1485610162; sf_remember=f464bd79380df4d3c64702ba71d500f2 DNT:1 Host:segmentfault.com Referer:https://segmentfault.com/u/charliecharlie/articles Upgrade-Insecure-Requests:1 User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36
Accept: 客戶端可以響應的數據類型
Accept-Encoding: 客戶端可以接受的編碼類型
Accept-Language: 客戶端可以允許的語言
Cache-Control: 如果制定了max-age=5,則訪問過某一個連接5秒內,再訪問則不會再請求服務器。
Connection: 如果指定keep-alive則客戶端請求長鏈接。
Cookie: 指定Cookie
DNT: 即Do not Tack。 發送請求方不希望被跟蹤。
Host: 即主機。在http 1.0的加強版和http 1.1中加入了Host行。用于區分同一個ip的不同域名。
Referer: 即該請求的來源
Upgrade_Insecure-Requests: 可以閱讀https://segmentfault.com/q/10...了解詳情。
User-Agent: 即發出請求的用戶信息。
Content-Type: 在使用REST接口的時候,服務器會檢查該值。用來確定HTTP Body內容該如何解析。主要的值有 application/xml application/json application/x-www-form-urlencoded等
上面對于爬蟲比較重要的有User-Agent、Referer。
User-Agent主要用來將Python urllib2偽裝成一個正常的瀏覽器。
Referer主要用來應對有些網站的防盜鏈措施,給Referer指定一個網址,就是告訴服務器該請求來自域名內的某一個頁面。
import urllib2 url = "http://www.baidu.com" headers = { "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36", "Referer": "http://www.baidu.com" } request = urllib2.Request(url, headers=headers) response = urllib2.urlopen(request) print response.read()Proxy(代理)設置
上面我們將urllib2通過設置headers將自己偽裝成一個正常的瀏覽器,但是如果我們頻繁快速地訪問某一個域名,那么服務器就會很快發現我們是一個爬蟲,因為正常的一個用戶不會如此頻繁快速地訪問一個網站。
那么,我們就得將自己偽裝成好幾個用戶(IP). 這時候就需要用到代理。
urllib2 默認會使用環境變量 http_proxy 來設置 HTTP Proxy。
但是我們需要更加靈活的切換代理。我們用一個代理訪問一段時間后,就需要切換到其他代理再訪問。
我們可以給urllib2安裝ProxyHandler。ProxyHandler需要傳入一個字典。該字典:it must be a dictionary mapping protocol names to URLs of proxies. . 就是說key是網絡協議名稱,value是代理的url。
例如:
proxies = { "http":"http://some_proxy.com:8080", "https":"https://some_proxy.com:8080" }
下面是一個示例代碼,展示了如何使用ProxyHandler。
import urllib2 proxy_handler = urllib2.ProxyHandler(proxies={"http": "http://124.88.67.54:80"}) opener = urllib2.build_opener(proxy_handler) urllib2.install_opener(opener) response = urllib2.urlopen("http://www.baidu.com") print response.getcode()DELETE 和 PUT 函數
http協議有六種請求方法,get,head,put,delete,post,options。
GET 客戶端發送一個請求來獲取服務器的資源。 服務器返回一組headers和呈現數據(html、圖片資源等)給客戶端。
HEAD 客戶端發送一個請求來獲取服務器資源等頭信息。服務器只headers信息但是不返回呈現數據。主要的應用場景是用于判斷某一個資源是否存在。
PUT 客戶端請求新增一個資源。PUT與POST類似,但是表單不支持PUT。另外PUT一般會明確指定資源存放的位置。例如"http://www.myblog.com/articles/2100"。意思是將現在提交的數據存放于articles下第2100篇。由于表單不支持PUT操作,很多框架則是在form表單中設置一個隱藏的input來標示該請求應該是PUT。
DELETE 請求刪除某一個資源。
POST 向服務器提交數據。
OPTIONS 向服務器查詢該鏈接支持哪些請求方法。
理論上urllib2只支持GET、POST方法。并不支持http的其他方法。通過源碼可知,Request判斷采用哪種請求方式是通過判斷是否設置了data。
def get_method(self): if self.has_data(): return "POST" else: return "GET"
因此我們可以臨時覆寫request的get_method方法來更改請求方法。例如
request = urllib2.Request("http://www.baidu.com") request.get_method = lambda: "PUT" # 用匿名函數覆寫request的get_method方法。 response = urllib2.urlopen(request) print response.info()
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/38380.html
摘要:申明本系列文章借鑒了慕課網的課程,。慕課網是一個非常贊的學習網站。是下的一個模塊,在中,被拆分成和實現一個最簡單的下載器使用函數可以給服務器發送一個請求。該函數返回一個該返回的對象有三個額外的函數取得服務器返回的。默認沒有的,請求方式為。 申明:本系列文章借鑒了慕課網的課程,http://www.imooc.com/learn/563。慕課網是一個非常贊的學習網站。 urllib2是p...
摘要:趁著春節,希望能寫一個小小的網絡爬蟲框架。網頁下載器接收,將頁面內容下來。可以定義一個表,定義兩個字段和緩存數據庫網頁下載器網頁下載器就是更具下載網頁內容等。常見的網頁下載器有是官方的基礎模塊。 趁著春節,希望能寫一個小小的網絡爬蟲框架。先定一個小目標,希望能比較優雅地將某個網站上的所有圖片爬下來。暫時先將這個爬蟲的名字叫做Squirrel,小松鼠吧。 什么是爬蟲 爬蟲其實是一種從互聯...
摘要:設置和處理事實上,并不是所有發起的請求都能得到服務器的回應。例如網絡無鏈接連接不到服務器鏈接不存在請求的方法不對等情況都會造成拋出錯誤。上面說到的出錯就會拋出。用于處理相關的錯誤。 urllib2的timeout timeout參數用于設置超時。我們在爬取一些響應較慢的網站的時候,需要設置一個比較長的超時時間。 response = urllib2.urlopen(request, t...
摘要:相當于該用戶的檔案。上述的文字對機制描述的比較簡單也并不一定完全正確。但是默認的并不支持。中供我們使用的是。創建需要闖入一個存放的容器。即過期的也保存。目前博主只知道鏈接后帶的參數需要與相匹配。但是并不知道兩者具體的關系。 很多網站的資源需要用戶登錄之后才能獲取。我們一旦登錄后再訪問其他被保護的資源的時候,就不再需要再次輸入賬號、密碼。那么網站是怎么辦到的呢?一般來說,用戶在登錄之后,...
摘要:學習網絡爬蟲主要分個大的版塊抓取,分析,存儲另外,比較常用的爬蟲框架,這里最后也詳細介紹一下。網絡爬蟲要做的,簡單來說,就是實現瀏覽器的功能。 Python學習網絡爬蟲主要分3個大的版塊:抓取,分析,存儲 另外,比較常用的爬蟲框架Scrapy,這里最后也詳細介紹一下。 首先列舉一下本人總結的相關文章,這些覆蓋了入門網絡爬蟲需要的基本概念和技巧:寧哥的小站-網絡爬蟲,當我們在瀏覽器中輸入...
閱讀 2947·2021-09-23 11:32
閱讀 2918·2021-09-22 15:12
閱讀 1708·2019-08-30 14:07
閱讀 3448·2019-08-29 16:59
閱讀 1640·2019-08-29 11:11
閱讀 2307·2019-08-26 13:50
閱讀 2426·2019-08-26 13:49
閱讀 2621·2019-08-26 11:49