Berdasarkan tautan ke situs web target, artikel ini semakin meningkatkan kesulitan, menangkap konten yang kita butuhkan di halaman target dan menyimpannya dalam database. Kasus uji di sini menggunakan situs web unduhan film yang sering saya gunakan (http://www.80s.la/). Saya awalnya ingin merangkak semua tautan unduhan film di situs web, tetapi kemudian saya merasa terlalu lama, jadi saya mengubahnya untuk merangkak tautan unduhan untuk film 2015.
Pengantar Prinsip Pertama
Faktanya, prinsip -prinsipnya mirip dengan artikel pertama. Perbedaannya adalah karena ada terlalu banyak daftar klasifikasi di situs web ini, tidak dapat dibayangkan jika tag ini tidak dipilih.
Anda tidak perlu menggunakan tautan kategori atau tag tautan. Anda tidak menggunakan tautan ini untuk merangkak halaman lain. Anda hanya dapat memperoleh daftar film halaman lain melalui pagination dari semua jenis film di bagian bawah halaman. Pada saat yang sama, untuk halaman detail film, Anda hanya merangkak judul film dan tautan unduhan guntur, dan jangan merangkak secara mendalam. Anda tidak memerlukan film yang disarankan dan tautan lain di halaman Detail.
Akhirnya, simpan tautan unduhan dari semua film yang diperoleh dalam koleksi Videolinkmap, dan simpan data di MySQL dengan melintasi koleksi ini.
Implementasi dua kode
Prinsip implementasi telah disebutkan di atas, dan ada komentar terperinci dalam kode, jadi saya tidak akan membicarakannya di sini, kodenya adalah sebagai berikut:
Tindakan Paket; Impor java.io.bufferedReader; impor java.io.ioException; impor java.io.inputstream; impor java.io.inputStreamReader; impor java.net.httpurlconnection; impor java.net.malformsception; impor Java. java.sql.preparedstatement; import java.sql.sqlexception; impor java.util.linkedhashmap; import java.util.map; import java.util.regex.matcher; import java.util.regex.pattern; kelas publik videolinkgrab {public static void main (string [] args) {videolinkgrab videolinkgrab = new videolinkgrab (); videolinkgrab.savedata ("http://www.80s.la/movie/list/-2015-----p } / ** * Simpan data yang diambil dalam database * * @param baseUrl * crawler titik awal * @return null * * / public void savedata (string baseUrl) {peta <string, boolean> oldmap = new LinkedHashMap <string, boolean> (); // Store Link-is Ia traversed by Map <String, String> videolinkMap = new LinkedHashMap <String, String> (); // Video Unduh Link String OldLinkHost = ""; // Pola host p = pola.compile ("(https?: //)? [^/// s]*"); // misalnya: http://www.zifangsky.cn pencocokan m = p.matcher (baseUrl); if (m.find ()) {oldlinkhost = m.group (); } oldmap.put (baseUrl, false); videolinkmap = crawllinks (oldlinkhost, oldmap); // melintasi dan menyimpan data dalam database coba {koneksi koneksi = jdbcdemo.getConnection (); untuk (map.entry <string, string> pemetaan: videolinkmap.entryset ()) {preparedStatement pStatement = connection .prepareStateMent ("INSERT INTO MOVIE (Moviename, Movielink) Value (?,?)"); pstatement.setstring (1, mapping.getKey ()); pstatement.setstring (2, mapping.getValue ()); Pstatement.ExecuteUpdate (); pstatement.close (); // system.out.println (mapping.getKey () + ":" + mapping.getValue ()); } connection.close (); } catch (sqlexception e) {e.printstacktrace (); }} /*** Merayap semua tautan halaman web yang dapat dirangkak di situs web. Dalam ide tersebut, algoritma prioritas luas digunakan untuk terus memulai permintaan untuk tautan baru yang belum dilalui. Sampai set lengkap dilalui, tidak ada tautan baru yang dapat ditemukan*, yang berarti bahwa tautan baru tidak dapat ditemukan. Tugas berakhir * * Saat membuat permintaan untuk tautan, gunakan pencarian reguler untuk tautan video yang kita butuhkan untuk halaman web, dan kemudian simpan di koleksi videolinkmap * * @param oldlinkhost * nama domain, seperti: http://www.zifangsky.cn * @param oldmap * tautan koleksi ke traversed * * crawllinks (string oldlinkhost, peta <string, boolean> oldmap) {peta <string, boolean> newMap = new LinkedHashMap <string, boolean> (); // tautan baru yang diperoleh dari setiap peta loop <string, string> videolinkMap = new LinkedHashMap <String, String> (); // Video Unduh Link String OldLink = ""; untuk (map.entry <string, boolean> pemetaan: oldmap.entryset ()) {// system.out.println ("tautan:" + mapping.getKey () + "-------- Periksa:" // + mapping.getValue ()); // jika belum dilalui oleh (! Mapping.getValue ()) {oldlink = mapping.getKey (); // inisiasi permintaan get coba {url url = url baru (oldlink); HttpurlConnection connection = (httpurlConnection) url .openconnection (); connection.setRequestMethod ("get"); Connection.setConnectTimeout (2500); Connection.setreadtimeout (2500); if (connection.getResponsecode () == 200) {inputStream inputStream = connection.getInputStream (); BufferedReader Reader = BufferedReader baru (InputStreamReader baru (InputStream, "UTF-8")); String line = ""; Pola pola = nol; Pencocokan pencocokan = null; // halaman detail film, ambil tautan unduhan video di dalamnya, dan jangan terus merangkak halaman lain secara mendalam jika (isMoviepage (oldlink)) {boolean checkTitle = false; String title = ""; while ((line = reader.readline ())! = null) {// Ambil judul video di halaman if (! checkTitle) {pola = Pattern.compile ("([^// s]+).*? </itement>"); matcher = pola.matcher (line); if (matcher.find ()) {title = matcher.group (1); checkTitle = true; melanjutkan; }} // Hapus tautan unduhan video dalam pola halaman = pola .compile ("(guntur: [^/"]+).*Thunder [rr] es [tt] itle =/"[^/"]*/""); matcher = pola.matcher (line); if (matcher.find ()) {videolinkmap.put (title, matcher.group (1)); System.out.println ("Nama Video:" + Judul + "------ Tautan Video:" + Matcher.group (1)); merusak; // Halaman saat ini telah terdeteksi}}} // Halaman daftar film lain jika (checkUrl (oldlink)) {while ((line = reader.readline ())! = Null) {pola = pola .compile ("<a href =/" ([^/"// s]*)/" "); POLAER = POLINK =/" ([^/"// S]*)/" "); POLATER = POLINK = POLINK =/" while) (while) (while) (while) (while) (while, [^/"// s]*)/" "); POLATER = POLAER = POLINEK =/" ([^/"// S]*)/" "); POLATER = POLINEK = POLINK = POLINEK = ([^/" Matcher.group (1) .trim (); (newLink.endswith ("/")) newLink = newLink.substring (0, newLink.length () - 1); System.outs.println (Temp: " + NewLink); e.printstacktrace (); } coba {thread.sleep (1000); } catch (InterruptedException e) {E.PrintStackTrace (); } oldmap.replace (oldlink, false, true); }} // Ada tautan baru, lanjutkan ke traverse if (! Newmap.isempty ()) {oldmap.putAll (newMap); videolinkmap.putall (crawllinks (oldlinkhost, oldmap)); // Karena karakteristik peta, duplikat pasangan nilai kunci tidak akan terjadi} return videolinkmap; }/** * menilai apakah itu halaman daftar film 2015 * @param url url untuk diperiksa * @return status * */public boolean checkUrl (string url) {pola pola = pattern.compile ("http://www.80s.la/movie/list/-2015----p/d2"); Pencocokan pencocokan = pola.matcher (url); if (matcher.find ()) return true; // Daftar Lain 2015 Return False; }/** * menilai apakah halaman tersebut adalah halaman detail film * @param URL tautan * @Return Status * */public boolean ismoviepage (string url) {pola pola = pattern.compile ("http://www.80s.la/movie//d+"); Pencocokan pencocokan = pola.matcher (url); if (matcher.find ()) return true; // halaman film lain mengembalikan false; }} Catatan: Jika Anda ingin merangkak beberapa konten tertentu dari situs web lain, Anda perlu memodifikasi beberapa ekspresi reguler secara wajar sesuai dengan situasi yang sebenarnya.
Tiga hasil tes
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.