網頁如何判斷一個請求來自於爬蟲?又應該如何繞過?
初步學習C#,有前輩建議從做個爬蟲開始。
目標網站:Home 路 SteamDB 路 Steam Database
使用WebClient、WebRequest、HttpWebRequest均出現403錯誤,而瀏覽器訪問正常。其次懷疑是HTTPS的問題,因此查詢網路後添加了證書方面的內容,然而由403變成無返回直至超時。
因而我判斷是網站拒絕了爬蟲請求的問題。
該網站沒有驗證碼,鏈接固定,沒有谷歌的人機身份認定,從瀏覽器正常訪問來看也沒有IP限制。如果講道理的話,Webbrowser肯定是能用的,但是我認為這不是最優的解。
網站是如何判斷一個請求是真實的還是爬蟲偽造的,又應該如何繞過?
==================================================
代碼如下:
Uri uri = new Uri(URL);
HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(uri);
CookieContainer c = new CookieContainer();
//......填寫Header
HttpWebResponse result = (HttpWebResponse)myReq.GetResponse();//該步異常,返回403
===================================================
已解決,原因是我的cookiecontainer沒填寫正確。
這麼鄭重其事的求問實在是遭不住眼瞎這個奇葩理由。代碼如下:
Uri uri = new Uri(URL);
HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(uri);
myReq.Method = "GET";
myReq.Accept = "text/html, application/xhtml+xml, image/jxr, */*";
myReq.Headers.Add("Accept-Language","en-US, en; q=0.8, zh-Hans-CN; q=0.5, zh-Hans; q=0.3");
myReq.KeepAlive = true;
myReq.CookieContainer = new CookieContainer();
myReq.CookieContainer.Add(uri, new Cookie("__cfduid", "XXXXXX"));
myReq.CookieContainer.Add(uri, new Cookie("_ga", "XXXXXX"));//這裡眼瞎了看成一行了
myReq.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240";
HttpWebResponse result = (HttpWebResponse)myReq.GetResponse();
Stream receviceStream = result.GetResponseStream();
StreamReader readerOfStream = new StreamReader(receviceStream, System.Text.Encoding.GetEncoding("utf-8"));
string strHTML = readerOfStream.ReadToEnd();
readerOfStream.Close();
receviceStream.Close();
result.Close();
我看你的意思是像要做爬蟲爬這個網站的數據,但是返回403是吧。那就按照我這幾年的爬蟲經驗,來跟各位探討一下。
首先,你是在模擬web請求,而不是在調用api,所以,我反對樓上說的ip限制的可能性。
第二,網站有可能會根據你的行為判斷,但是那是發生在你有相應的行為之後。如果你是爬了一陣之後發現變成403了,那麼這鐵定是百分百的行為判斷。
第三,如果你是第一次請求就403了,那我可以很負責的告訴你,問題出在你的header裡面。最常見的驗證就是驗證ua。
最簡單的方法,就是完全模擬用戶,你可以在chrome中自己抓個包,然後將header完全同步成chrome中的header,我相信你會看到200的返回
謝邀,我不是很了解爬蟲的實現以及相關技術,只略懂皮毛,根據我知道的瞎猜一下。
限制爬蟲,我想到三種辦法:
第一種是通過robot.txt,這個是種君子約定,你手動忽略它也不會有人給你判刑。
第二種是根據UserAgent,這個可以欺騙,你換了個Chrome瀏覽器的UserAgent,誰知道你是真Chrome還是假Chrome?
http://www.zhihu.com/question/1
http://www.zhihu.com/question/2
………
http://www.zhihu.com/question/2147483647
這不是爬蟲是什麼?
其次似乎會發POST請求的爬蟲比較少?如果你把你的網站,除了首頁,都改成POST的,應該能屏蔽一部分吧?
——————————
至於你說的,你訪問不了,應該是別的原因造成的吧?看起來「爬蟲被限制了」的可能性有,但並沒有100%…
設置useragent就好了
還有你的CookieContainer那個地方沒問題嗎?
驗證碼,機器學習
推薦閱讀:
※未來移動互聯網的應用搜索相比當前的移動搜索最大的優勢是什麼?
※搜索引擎優化(SEO)10大假裡面,你能理解幾個是假的?
※大型網站如何建立 SEO 體系?
※google搜索高級命令語法?
※最近流行的《2016年最難的SEO等級考試》正確答案是什麼?