iT邦幫忙

1

關於爬蟲時防止被鎖IP的Proxy設定

HELLO,大家好,這幾天使用爬蟲抓資料的時候遇到一些問題,因為在這個領域上還是新手,想請各位大大幫忙一下,謝謝!

在針對網頁做爬蟲的時候,有些網頁會因為短時間內request太多次請求,而造成該網站封鎖IP,而取不到資料的情況,小的我上網查了一下,似乎可以用Proxy代理IP替自己送出請求,所以我找了一些資料,去取得一些Proxy,但是目前都沒有成功,想請大家看一下我的程式碼,有沒有那裡疏忽的。

以下是我找到查詢可用Proxy的網頁:
http://www.freeproxylists.net/zh/?u=90&page=3
上面的網址我點不進去了,所以我又找了以下的網頁:
http://free-proxy.cz/zh/proxylist/country/TW/all/ping/all

以下是我的程式碼:

private static string getHtmlPage(string url, string referer, int timeout = 30, bool enableProxy = false)
        {
            try
            {
                string html = "";
                var myRequest = (HttpWebRequest)WebRequest.Create(url);
                myRequest.Method = "GET";
                myRequest.Timeout = 1000 * timeout;
                myRequest.AllowAutoRedirect = true;
                myRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36";
                myRequest.Referer = referer;
                if (enableProxy)
                {
                    //設定代理ip
                    var webProxy = new WebProxy("211.79.61.8", 3128);
                    myRequest.Proxy = webProxy;
                }
                using (WebResponse wr = myRequest.GetResponse())
                {
                    //在這裡對接收到的頁面內容進行處理
                    System.Text.Encoding myEncoding = System.Text.Encoding.GetEncoding("utf-8");
                    System.IO.StreamReader myStreamReader = new System.IO.StreamReader(wr.GetResponseStream(), myEncoding);
                    html = myStreamReader.ReadToEnd();
                }
                return html;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

WebProxy物件中設定Proxy給WebRequest但是用了大概十組都沒有成功過,錯誤基本上都是作業逾時遠端伺服器傳回一個錯誤: (400) 不正確的要求。無法連接至遠端伺服器,想請問大家哪裡有問題需要改進,如果還有沒注意到需要補充的地方,再麻煩各位大大告訴我,謝謝/images/emoticon/emoticon41.gif

看更多先前的討論...收起先前的討論...
優悠 iT邦新手 4 級 ‧ 2018-06-20 15:48:52 檢舉
可能是防火牆,我只是提供方向,不一定正確
我看你TIMEOUT 30,會不會太短?
weiclin iT邦高手 4 級 ‧ 2018-06-20 15:50:21 檢舉
那些免費的 proxy 不一定每個都能用, 你要先測試過
ㄛ我剛剛在試的時候發現上面的網址我進不去了,
所以我又找了以下的免費Proxy,
http://free-proxy.cz/zh/proxylist/country/TW/all/ping/all

給優悠大大:哈哈,其實他傳進來後有*1000,所以是30秒,感覺還有點長XD

給weiclin大大:ㄛ,可是我現在失敗到有點懷疑人生了...
froce iT邦高手 1 級 ‧ 2018-06-20 16:32:18 檢舉
懷疑人生的話,就一次不要爬太多,另外proxy是有分的,有些是 Transparent proxy,還是可以查出你的ip。
https://www.coder4.com/archives/4434
謝謝froce大大提供有關Proxy的資料及建議,我現在也慢慢的在找會被鎖的臨界值,
當然更好的方法是,我希望能夠透過Proxy去取得request的資料,
而不是用Proxy卻無法讓程式執行。
如果你是 hinet 線路
你可以先試試
proxy.hinet.net port 80
門神JanusLin大大:
用這一組的話可以耶!所以可以推斷程式沒有錯,
只是那些網站上的Proxy都無法使用嗎?

尚未有邦友回答

立即登入回答