Amalan perangkak Java: Cara merangkak data halaman web dengan cekap
Pengenalan:
Dengan perkembangan pesat Internet, sejumlah besar data berharga disimpan dalam pelbagai halaman web. Untuk mendapatkan data ini, selalunya perlu untuk mengakses setiap halaman web secara manual dan mengekstrak maklumat satu demi satu, yang sudah pasti tugas yang membosankan dan memakan masa. Untuk menyelesaikan masalah ini, orang ramai telah membangunkan pelbagai alat crawler, antaranya Java crawler adalah salah satu yang paling biasa digunakan. Artikel ini akan membawa pembaca memahami cara menggunakan Java untuk menulis perangkak web yang cekap dan menunjukkan amalan melalui contoh kod tertentu.
1. Prinsip asas perangkak
Prinsip asas perangkak web ialah menghantar permintaan HTTP dengan mensimulasikan penyemak imbas, dan kemudian menghuraikan halaman web dan mengekstrak data yang diperlukan. Proses kerja dibahagikan secara kasar kepada langkah berikut:
2. Penciptaan persekitaran pembangunan perangkak
Untuk mula membangunkan perangkak Java, anda perlu membina persekitaran yang sepadan. Pertama, pastikan Java Development Kit (JDK) dan Java Integrated Development Environment (IDE), seperti Eclipse, IntelliJ IDEA, dsb., dipasang. Kemudian, perkenalkan perpustakaan pengaturcaraan rangkaian yang diperlukan ke dalam projek, seperti HttpClient, Jsoup, dsb.
3. Latihan Praktikal: Dapatkan Data Kedudukan Filem Douban
Untuk mempraktikkan proses pembangunan crawler, kami memilih untuk merebut data Kedudukan Filem Douban sebagai contoh. Matlamat kami adalah untuk mengekstrak nama filem, penilaian dan bilangan pengulas.
Pertama, kita perlu menggunakan perpustakaan pengaturcaraan rangkaian Java untuk menghantar permintaan HTTP untuk mendapatkan kandungan halaman web. Berikut ialah contoh kod untuk menghantar permintaan GET menggunakan perpustakaan HttpClient:
import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; public class HttpClientExample { public static void main(String[] args) { CloseableHttpClient httpClient = HttpClients.createDefault(); HttpGet httpGet = new HttpGet("https://movie.douban.com/top250"); try (CloseableHttpResponse response = httpClient.execute(httpGet)){ HttpEntity entity = response.getEntity(); String result = EntityUtils.toString(entity); System.out.println(result); } catch (Exception e) { e.printStackTrace(); } } }
Dengan menghantar permintaan HTTP, kami memperoleh kandungan web penarafan filem Douban. Seterusnya, kita perlu menggunakan perpustakaan parsing untuk mengekstrak data yang diperlukan. Berikut ialah contoh kod untuk menggunakan perpustakaan Jsoup untuk menghuraikan halaman HTML:
import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; public class JsoupExample { public static void main(String[] args) { try { Document document = Jsoup.connect("https://movie.douban.com/top250").get(); Elements elements = document.select("ol.grid_view li"); for (Element element : elements) { String title = element.select(".title").text(); String rating = element.select(".rating_num").text(); String votes = element.select(".star span:nth-child(4)").text(); System.out.println("电影名称:" + title); System.out.println("评分:" + rating); System.out.println("评价人数:" + votes); System.out.println("-------------------------"); } } catch (Exception e) { e.printStackTrace(); } } }
Dalam aplikasi sebenar, kami mungkin perlu memproses dan menyimpan data yang diekstrak selanjutnya. Sebagai contoh, kita boleh menyimpan data dalam pangkalan data untuk kegunaan seterusnya. Berikut ialah contoh kod yang menggunakan pangkalan data MySQL untuk menyimpan data:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class DataProcessingExample { public static void main(String[] args) { String jdbcUrl = "jdbc:mysql://localhost:3306/spider"; String username = "root"; String password = "password"; try (Connection conn = DriverManager.getConnection(jdbcUrl, username, password)) { String sql = "INSERT INTO movie (title, rating, votes) VALUES (?, ?, ?)"; PreparedStatement statement = conn.prepareStatement(sql); // 假设从网页中获取到了以下数据 String title = "肖申克的救赎"; String rating = "9.7"; String votes = "2404447"; statement.setString(1, title); statement.setString(2, rating); statement.setString(3, votes); int rowsAffected = statement.executeUpdate(); System.out.println("插入了 " + rowsAffected + " 条数据"); } catch (SQLException e) { e.printStackTrace(); } } }
IV Ringkasan
Artikel ini memperkenalkan prinsip asas perangkak Java dan menunjukkan cara menggunakan Java untuk menulis perangkak web yang cekap melalui contoh kod tertentu. Dengan mempelajari pengetahuan asas ini, pembaca boleh membangunkan program perangkak yang lebih kompleks dan fleksibel mengikut keperluan sebenar. Dalam aplikasi praktikal, anda juga perlu memberi perhatian kepada penggunaan perangkak yang sah dan menghormati dasar privasi dan syarat perkhidmatan tapak web untuk mengelakkan pertikaian undang-undang. Saya berharap artikel ini akan menjadi panduan kepada pembaca dalam pembelajaran dan aplikasi crawler Java.
Atas ialah kandungan terperinci Amalan perangkak Java yang cekap: perkongsian teknik rangkak data web. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!