不吹水,正兒八經講天眼查、企查查和啟信寶的抓取
阿新 • • 發佈:2019-01-03
這些站點有一個共同的特點就是量大,各維度首頁的請求基本上不需要登入賬號就可以拿到,請求連結與Uid相關聯。要拿到這些資料,第一步我們要拿到對方的Uid,在沒有捷徑可走的情況下,我們需要準備大量的關鍵字去對方網站搜尋,在不使用賬號的情況下,每次最多拿到十條,這樣子我們就需要優化我們的關鍵字,這些關鍵字是通過幾千萬的企業名錄訓練出來的,爭取做到每個關鍵字拿到的資料都不一樣,拿取公司名Uid的同時我們就可以拿到他的企業詳情。
企業詳情裡面是有感興趣企業,對外投資,分支機構都可以解析出新的公司名,通過這種方式又能增加大量的公司的。通過上述方式,一段時間後就能抓齊對方的公司名錄庫。這型別站點需要大量的代理IP,翻頁抓取需要大量的賬號,沒有什麼好的捷徑可走的,要說縮短抓取週期,就是優化你的公司名地址搜尋演算法,只要拿到對方請求其他維度資料需要的這家公司的Uid就解決了大部分的問題了,後續拿著這些Uid請求對應的資料介面就可以了。
這種方法對於同類型需要搜尋請求詳情拿取大量公司資訊的站點,策略都是相通的,抓資料無非兩個防禦,Cookie限制和Ip限制,Ip限制的話找到對應合適的代理IP就可以了,Cookie限制就去準備賬號,這裡的Cookie限制不一定是拿到登入賬號後的Cookie就可以直接用的,可能還有別的通過js加解密出來的token值,說白了就是去破解一個請求連結對應的http的所有需要具備的引數,引數對上了就闊以拿到對應的資料。
附上簡單的C#爬蟲請求企查查基礎頁面的程式碼:
private void MakeRequests() { HttpWebResponse response; string responseText; if (Request_www_qichacha_com(out response)) { responseText = ReadResponse(response); response.Close(); } } private static string ReadResponse(HttpWebResponse response) { using (Stream responseStream = response.GetResponseStream()) { Stream streamToRead = responseStream; if (response.ContentEncoding.ToLower().Contains("gzip")) { streamToRead = new GZipStream(streamToRead, CompressionMode.Decompress); } else if (response.ContentEncoding.ToLower().Contains("deflate")) { streamToRead = new DeflateStream(streamToRead, CompressionMode.Decompress); } using (StreamReader streamReader = new StreamReader(streamToRead, Encoding.UTF8)) { return streamReader.ReadToEnd(); } } } private bool Request_www_qichacha_com(out HttpWebResponse response) { response = null; try { HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.qichacha.com/firm_9cce0780ab7644008b73bc2120479d31.shtml"); request.KeepAlive = true; request.Headers.Set(HttpRequestHeader.CacheControl, "max-age=0"); request.Headers.Add("Upgrade-Insecure-Requests", @"1"); request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36"; request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"; request.Headers.Add("DNT", @"1"); request.Referer = "https://www.qichacha.com/g_GD.html"; request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br"); request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); request.Headers.Set(HttpRequestHeader.Cookie, @""); response = (HttpWebResponse)request.GetResponse(); } catch (WebException e) { if (e.Status == WebExceptionStatus.ProtocolError) response = (HttpWebResponse)e.Response; else return false; } catch (Exception) { if(response != null) response.Close(); return false; } return true; }
喜歡C#大資料爬蟲方向的小夥伴可以加我微信 qyszyf--si2013shen 交流,用過各大代理平臺的代理IP,歡迎留言諮詢。