이 기사는 Jihu Crawler를 공유하여 httpclient 4.5를 기반으로 Zhihu 사용자의 기본 정보를 캡처합니다. 특정 내용은 다음과 같습니다
세부:
크롤링 90W+ 사용자 정보 (기본적으로 모든 활성 사용자가 내부에 있습니다)
일반적인 아이디어 :
1. 먼저, 로그인을 Zhihu에 시뮬레이션하십시오. 성공적으로 로그인 한 후 쿠키를 디스크로 직렬화하십시오. 나중에 매번 로그인 할 필요는 없습니다 (로그인을 시뮬레이션하지 않으면 브라우저에서 쿠키를 직접 작업 할 수 있습니다).
2. 스레드 풀 2 개와 스토리지 하나를 만듭니다. Web Pages를 크롤링하기위한 스레드 풀은 요청을 실행하고 웹 페이지 컨텐츠를 반환하고 저장에 저장해야합니다. 다른 하나는 웹 페이지 스레드 풀을 구문 분석하는 것입니다. 웹 페이지 스레드 풀은 스토리지에서 웹 페이지 컨텐츠를 가져 와서 구문 분석하고, 사용자의 정보를 분석하고, 데이터베이스에 저장하고, 사용자가 따르는 사람의 홈페이지를 분석하고, 크롤링 웹 페이지 스레드 풀에 주소 요청을 추가하는 것입니다. 계속 계속하십시오.
3. URL 중복 제거와 관련하여 방문한 링크 MD5를 데이터베이스로 직접 변환합니다. 방문마다 링크가 데이터베이스에 존재하는지 확인하십시오.
지금까지 100W 사용자가 캡처되었으며 방문한 링크는 220W+입니다. 이제 크롤링 된 사용자는 비활성 사용자입니다. 더 활발한 사용자는 기본적으로 잡혔습니다.
프로젝트 주소 : https://github.com/wycm/mycrawler
구현 코드 :
저자 : WO YAN Chen SI 링크 : https://www.zhihu.com/question/36909173/answer/97643000 출처 : Zhihu 저작권은 저자에게 속합니다. 상업적 재판을 보려면 승인을 받으려면 저자에게 문의하십시오. 비상업적 재현의 경우 소스를 표시하십시오. /**** @param httpclient http client* @param 컨텍스트 http context* @return*/public boolean login (closeblehttpclient httpclient, httpclientContext context) {string yzm = null; string loginstate = null; httpget getRequest = new httpget ( "https://www.zhihu.com/#signin"); httpclientutil.getwebpage (httpclient, context, getrequest, "utf-8", false); httppost request = new httppost ( "https://www.zhihu.com/login/email"); list <namevaluepair> formparams = new arraylist <namevaluepair> (); yzm = yzm (httpclient, 문맥, "https://www.zhihu.com/captcha.gif?type=login"); // 자연스러운 인식 검증 코드 formparams.add (new BasicNameValuePair ( "Captcha", yzm)); formparams.add (new BasicnamevaluePair ( "_ xsrf"); ");"); ");"); formparams.add (new BasicnamevaluePair ( "이메일", "이메일")); formparams.add (new BasicNameValuePair ( "password", "password")); formparams.add (new BasicNameValuePair (새로운 BasicNameValuePair ( "RemembeMe", "true")); urlencodedformentity entity = null = entity = null = urlencodedformentity (formparams, "utf-8");} catch (unsupportedencodingexception e) {e.printstacktrace ();} request.setentity (entity); loginstate = httpclientutil.getwebpage (httpclient, context, request, "new = // galse); // jsonObject (loginstate); if (jo.get ( "r"). tostring (). equals ( "0")) {system.out.println ( "로그인"); getRequest = new httpget ( "https://www.zhihu.com"); "utf-8", false); // 홈 페이지를 방문 httpclientutil.serializeobject (context.getCookiestore (), "Resources/ZhihuCookies"); // Zhihu 쿠키 시리즈, 다음에 쿠키를 통해 직접 로그인하십시오. false;}}/*** 알몸의 눈 인식 검증 코드* @param httpclient http client* @param context http context* @param url verification code address* @return*/public string yzm (closeblehttpclient httpclient, httpclientContext Context, String url) {httpclientutil.downloadfile (httpclient, context, url, "d :/test/", "1.gif", true); 스캐너 sc = 새 스캐너 (System.in); String yzm = sc.nextline (); return yzm;}생식 이미지 :
위의 내용은이 기사에 관한 모든 것입니다. 모든 사람의 학습에 도움이되기를 바랍니다.