บทความนี้แบ่งปัน Zhihu Crawler ที่ใช้ Java เพื่อรวบรวมข้อมูลพื้นฐานของผู้ใช้ Zhihu ตาม HTTPClient 4.5 สำหรับการอ้างอิงของคุณ เนื้อหาเฉพาะมีดังนี้
รายละเอียด:
รวบรวมข้อมูลผู้ใช้ 90W+ (โดยทั่วไปผู้ใช้ที่ใช้งานอยู่ทั้งหมดอยู่ภายใน)
แนวคิดทั่วไป:
1. ก่อนอื่นให้จำลองการเข้าสู่ระบบไปยัง Zhihu หลังจากเข้าสู่ระบบสำเร็จแล้วให้ทำคุกกี้เป็นดิสก์ คุณไม่จำเป็นต้องเข้าสู่ระบบทุกครั้งในอนาคต (หากคุณไม่จำลองการเข้าสู่ระบบคุณสามารถให้คุกกี้ได้โดยตรงจากเบราว์เซอร์)
2. สร้างพูลสองเธรดและที่เก็บหนึ่งแห่ง กลุ่มของเธรดเพื่อรวบรวมข้อมูลหน้าเว็บหน้ารับผิดชอบในการดำเนินการคำขอส่งคืนเนื้อหาหน้าเว็บและบันทึกไว้ในที่เก็บข้อมูล อีกอย่างคือการแยกพูลเธรดเว็บเพจซึ่งรับผิดชอบในการนำเนื้อหาหน้าเว็บออกจากการจัดเก็บและแยกวิเคราะห์วิเคราะห์ข้อมูลของผู้ใช้และบันทึกลงในฐานข้อมูลวิเคราะห์หน้าแรกของบุคคลที่ผู้ใช้กำลังติดตามและเพิ่มการร้องขอที่อยู่ลงในพูลเธรด ดำเนินต่อไป
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 ไคลเอนต์* @param บริบท http บริบท* @return*/ล็อกอินบูลีนสาธารณะ (ปิดการใช้งาน httpClient, httpClientContex httpget ("https://www.zhihu.com/#signin"); httpclientutil.getWebPage (httpClient, บริบท, getRequest, "UTF-8", false); httppost request = new httppost ("https://www.zhihu.com/login/email"); รายการ <namevaluePair> formparams = arraylist ใหม่ <NamevaluePair> (); yzm = yzm (httpClient, บริบท "https://www.zhihu.com/captcha.gif FormParams.add (ใหม่ BasicNameValuePair ("อีเมล", "อีเมล")); formParams.add (ใหม่ BasicNameValuePair ("รหัสผ่าน", "รหัสผ่าน")); formParams.add "utf-8");} catch (unsupportencodeningexception e) {e.printstacktrace ();} request.setEntity (เอนทิตี); loginState = httpClientUtil.getWebPage (httpClient, บริบท, คำขอ "UTF-8" jsonObject (เข้าสู่ระบบ); ถ้า (jo.get ("r"). toString (). เท่ากับ ("0")) {system.out.println ("เข้าสู่ระบบสำเร็จ"); getRequest = httpget ("https://ww.zhihu.com); "UTF-8", FALSE); // เยี่ยมชมหน้าแรก httpClientutil.serializeObject (context.getCookiestore (), "ทรัพยากร/zhihucookies"); // serialize คุกกี้ zhihu, ลงชื่อเข้าใช้โดยตรงผ่านคุกกี้ในครั้งต่อไป false;}}/*** รหัสการตรวจสอบการจดจำเปลือยเปล่า* @param httpClient ไคลเอนต์ http* @param บริบท http บริบท* @param url รหัสการตรวจสอบรหัส* @return*/สตริงสาธารณะ yzm url) {httpclientutil.downloadfile (httpclient, บริบท, url, "d:/test/", "1.gif", true); Scanner sc = สแกนเนอร์ใหม่ (System.in); String yzm = sc.nextline (); return yzm;ภาพการทำซ้ำ:
ข้างต้นเป็นเรื่องเกี่ยวกับบทความนี้ฉันหวังว่ามันจะเป็นประโยชน์กับการเรียนรู้ของทุกคน