1. 程式人生 > >不吹水,正兒八經講天眼查、企查查和啟信寶的抓取

不吹水,正兒八經講天眼查、企查查和啟信寶的抓取

       這些站點有一個共同的特點就是量大,各維度首頁的請求基本上不需要登入賬號就可以拿到,請求連結與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,歡迎留言諮詢。