Artikel ini berbagi crawler Zhihu berbasis Java untuk menangkap informasi dasar pengguna Zhihu, berdasarkan HTTPClient 4.5 untuk referensi Anda. Konten spesifiknya adalah sebagai berikut
Detail:
Crawl 90W+ Informasi Pengguna (pada dasarnya semua pengguna aktif ada di dalam)
Ide Umum:
1. Pertama, simulasikan login ke Zhihu. Setelah masuk dengan sukses, serialisasi cookie ke disk. Anda tidak perlu masuk setiap kali di masa mendatang (jika Anda tidak mensimulasikan login, Anda dapat memasukkan cookie langsung dari browser).
2. Buat dua kumpulan utas dan satu penyimpanan. Sejumlah utas untuk merangkak halaman web bertanggung jawab untuk melaksanakan permintaan, mengembalikan konten halaman web, dan menyimpannya di penyimpanan. Yang lain adalah untuk menguraikan kumpulan utas halaman web, yang bertanggung jawab untuk mengambil konten halaman web dari penyimpanan dan parsing, menganalisis informasi pengguna dan menyimpannya ke dalam database, menganalisis beranda orang yang diikuti pengguna, dan menambahkan permintaan alamat ke kumpulan utas halaman web yang merangkak. Terus berjalan.
3. Mengenai deduplikasi URL, saya langsung mengonversi tautan yang dikunjungi MD5 ke dalam database. Sebelum setiap kunjungan, periksa apakah tautan ada di database.
Sejauh ini, pengguna 100W telah ditangkap, dan tautan yang dikunjungi adalah 220W+. Pengguna merangkak sekarang adalah beberapa pengguna yang tidak aktif. Pengguna yang lebih aktif pada dasarnya ditangkap.
Alamat Proyek: https://github.com/wycm/mycrawler
Kode Implementasi:
Penulis: Wo Yan Chen Si Tautan: https://www.zhihu.com/question/36909173/answer/97643000 Sumber: Zhihu Hak Cipta milik penulis. Untuk mencetak ulang komersial, silakan hubungi penulis untuk otorisasi. Untuk cetak ulang non-komersial, tunjukkan sumbernya. /**** @param httpClient http klien* @param konteks http konteks* @return*/login boolean publik (closeAbleHttpClient httpclient, httpClientContext konteks) {string yzm = null; string loginState = null; httpget) {string yzm = null; string LOGINSTATE = null; httpget) {string yzm = null; loginState = null; httpget) {string yzm = nullState = null; httpget) {string yZm = nullState Httpget ("https://www.zhihu.com/#signin"); httpclientutil.getwebpage (httpclient, konteks, getRequest, "utf-8", false); httppost permintaan = new Httppost ("https://www.zhihu.com/login/email"); daftar <namevaluepair> formparams = new arraylist <namevaluepair> (); yzm = yzm (httpclient, Konteks, "https://www.zhihu.com/captcha.gif?type=login"); // kode verifikasi pengakuan alami formparams.add (basicnamevaluePair baru ("captcha", yzm)); formparams.add (new BasicNamevaluePair ("_ _ _ _ _ _ _ _ _ _ _ _); Formparams.add (BasicNamevaluePair baru ("Email", "Email")); formparams.add (BasicNamevaluePair baru ("Kata Sandi", "Kata Sandi")); Formparams.add (new BasicnamevaluePair ("Remember_Me", "true")); Urlencodedforfority fority ("Remember_Me", "true")); Urlencodedforfority fority ("null = null; "UTF-8");} Catch (UnsupportedEncodingException e) {e.printstacktrace ();} request.setentity (entitas); LoginState = httpclientutil.getWebPage (httpClient, konteks, permintaan, "UTF-8", false); // LOGONJ (httpClient, konteks, "UTF-8", false); // LOGONJ (httpClient, Konteks, "UTF-8", FALSE); JsonObject (loginState); if (jo.get ("r"). ToString (). Equals ("0")) {System.out.println ("Login berhasil"); getRequest = httpget ("httppppage://www.zhihu.com"); httpget, "https:/www.zhihu.com"); httpget, https:/www.zhihu.com "); httpget, https:/www.zhihu.com"); httpget, https:/www.zhihu.compet "UTF-8", false); // Kunjungi halaman beranda httpclientutil.serializeObject (context.getCookiesttore (), "sumber daya/zhihucookies"); // serialize zhihu cookies, Masuk langsung melalui cookie saat berikutnya Anda masuk kembali true;} else {System.out.printl {System.out.printl {System.out.printl {System.out.printl {System.out.printl {System.out.printl {System.out.printl {System.out.printl {System.out.printl {System.out.printl {System.out.printl {System.out.printl {System.out. * Kode Verifikasi Pengakuan Mata Telanjang* @param httpclient http klien* @param konteks konteks http* @param url kode verifikasi* @return*/public string yzm (closeableHttpclient httpclient, httpclientContext konteks, string url) {httpclient, httpclientContext konteks, string url) {httpclient, httpclientContext konteks, string url) {httpclient, httpclientContext konteks, string url) {httpclient, httpclientContext konteks, string URL) {httpclient, httpclientContext konteks "D:/test/", "1.gif", true); pemindai sc = pemindai baru (system.in); string yzm = sc.nextline (); return yzm;}Gambar reproduksi:
Di atas adalah semua tentang artikel ini, saya harap ini akan membantu untuk pembelajaran semua orang.