Tutorial aplikasi perangkak Java, penangkapan dan analisis data praktikal
Dengan kemunculan era Internet, data telah menjadi satu-satunya cara untuk syarikat dan individu berjaya, jadi kepentingan data telah menjadi lebih dan lebih yang penting. Sebagai alat yang berkuasa untuk pemerolehan data, teknologi perangkak telah digunakan secara meluas dalam semua bidang kehidupan. Artikel ini akan memperkenalkan cara menggunakan bahasa Java untuk menulis perangkak bagi menangkap dan menganalisis data.
1. Pengetahuan prasyarat
Sebelum mempelajari Java crawler, anda perlu menguasai pengetahuan asas berikut:
2. Asas perangkak Java
Perangkak web ialah program automatik yang boleh mensimulasikan tingkah laku manusia untuk mengakses Internet, mengekstrak maklumat daripada halaman web dan memprosesnya. Bahasa Java mempunyai keupayaan pengaturcaraan rangkaian yang baik dan ciri berorientasikan objek yang berkuasa, jadi ia sangat sesuai untuk menulis program perangkak.
Perangkak Java biasanya dibahagikan kepada tiga bahagian: pengurus URL, pemuat turun halaman web dan penghurai halaman web.
Pengurus URL menguruskan alamat URL yang perlu dirangkak oleh perangkak dan merekodkan URL yang telah dirangkak dan URL yang masih perlu dirangkak . Secara umumnya terdapat dua cara untuk melaksanakan pengurus URL:
(1) Pengurus URL dalam ingatan: Gunakan Set atau Baris Gilir untuk merekodkan URL yang telah dirangkak dan URL yang akan dirangkak.
(2) Pengurus URL pangkalan data: Simpan URL yang dirangkak dan yang akan dirangkak dalam pangkalan data.
Pemuat Turun Halaman Web ialah bahagian teras perangkak dan bertanggungjawab untuk memuat turun halaman web daripada Internet. Perangkak Java umumnya mempunyai dua kaedah pelaksanaan:
(1) URLConnection: dilaksanakan menggunakan kelas URLConnection, yang agak mudah digunakan Kod teras adalah seperti berikut:
URL url = new URL("http://www.example.com"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); InputStream in = conn.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); String line = reader.readLine(); while (line != null) { System.out.println(line); line = reader.readLine(); }
(2) HttpClient. : dilaksanakan menggunakan rangka kerja HttpClient , lebih berkuasa daripada URLConnection, dan boleh mengendalikan maklumat pengepala HTTP seperti Kuki dan Ejen Pengguna tersuai Kod teras adalah seperti berikut:
HttpClient httpClient = new HttpClient(); GetMethod getMethod = new GetMethod("http://www.example.com"); int status = httpClient.executeMethod(getMethod); if (status == HttpStatus.SC_OK) { InputStream in = getMethod.getResponseBodyAsStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); String line = reader.readLine(); while (line != null) { System.out.println(line); line = reader.readLine(); } }
Muat turun halaman web Selepas memuat turun, anda perlu menggunakan penghurai halaman web untuk mengekstrak data. Perangkak Java biasanya mempunyai dua kaedah pelaksanaan:
(1) Ungkapan biasa: Gunakan ungkapan biasa untuk memadankan data dalam halaman web Kod teras adalah seperti berikut:
String pattern = "<title>(.*?)</title>"; Pattern r = Pattern.compile(pattern); Matcher m = r.matcher(html); if (m.find()) { System.out.println(m.group(1)); }
(2) Penghurai HTML: Dilaksanakan menggunakan rangka kerja Jsoup, halaman web boleh ditukar menjadi struktur DOM, dan kemudian data boleh diperolehi melalui pemilih CSS atau kaedah yang serupa dengan XPath Kod teras adalah seperti berikut:
Document doc = Jsoup.connect("http://www.example.com").get(); Elements links = doc.select("a[href]"); for (Element link : links) { String text = link.text(); String href = link.attr("href"); System.out.println(text + " " + href); }
3 . Amalan perangkak Java
Fahami Selepas memahami idea asas dan kaedah pelaksanaan perangkak Java, kita boleh cuba menulis program perangkak mudah untuk mendapatkan data daripada tapak web dan menganalisisnya.
Kami memilih untuk merangkak data kedudukan filem Douban. Mula-mula, kita perlu mendapatkan alamat URL kedudukan filem Douban, seperti yang ditunjukkan di bawah:
https://movie.douban.com/chart
Kemudian, kita boleh menggunakan rangka kerja Jsoup untuk memuat turun halaman web dan mengekstrak data di dalamnya, kodnya adalah seperti berikut:
Document doc = Jsoup.connect("https://movie.douban.com/chart").get(); Elements items = doc.select("div.item"); List<Movie> movieList = new ArrayList<>(); for (Element item : items) { Elements title = item.select("div.info div.hd a"); Elements rating = item.select("div.info div.bd div.star span.rating_num"); Elements director = item.select("div.info div.bd p").eq(0); Elements actor = item.select("div.info div.bd p").eq(1); Movie movie = new Movie(); movie.setTitle(title.text()); movie.setRating(Double.valueOf(rating.text())); movie.setDirector(director.text().replace("导演: ", "")); movie.setActor(actor.text().replace("主演: ", "")); movieList.add(movie); }
Di sini kami menggunakan kelas Filem untuk menyimpan maklumat filem.
Simpan data filem yang diperoleh ke dalam pangkalan data untuk memudahkan analisis seterusnya. Di sini kita menggunakan JDBC untuk mengendalikan pangkalan data bilangan filem dan purata penarafan setiap Pengarah. Kodnya adalah seperti berikut:
public class DBHelper { private static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; private static final String DB_URL = "jdbc:mysql://localhost:3306/db"; private static final String USER = "root"; private static final String PASS = "password"; public static Connection getConnection() { Connection conn = null; try { Class.forName(JDBC_DRIVER); conn = DriverManager.getConnection(DB_URL, USER, PASS); } catch (Exception e) { e.printStackTrace(); } return conn; } public static void saveMovies(List<Movie> movieList) { try (Connection conn = getConnection(); PreparedStatement stmt = conn.prepareStatement( "INSERT INTO movie(title,rating,director,actor) VALUES (?,?,?,?)" )) { for (Movie movie : movieList) { stmt.setString(1, movie.getTitle()); stmt.setDouble(2, movie.getRating()); stmt.setString(3, movie.getDirector()); stmt.setString(4, movie.getActor()); stmt.addBatch(); } stmt.executeBatch(); } catch (Exception e) { e.printStackTrace(); } } }
Artikel ini memperkenalkan pengetahuan asas dan aplikasi praktikal perangkak Java, dengan harapan dapat membantu pembaca memahami teknologi perangkak dan pengaturcaraan Java dengan lebih baik. Dalam amalan, anda perlu memberi perhatian kepada norma undang-undang dan etika dan mengelak daripada mendapatkan privasi orang lain secara haram dan melanggar hak cipta. Pada masa yang sama, anda juga perlu menguasai teknologi anti-crawler untuk mengelak daripada disekat atau IP diharamkan oleh tapak web yang dirangkak.
Atas ialah kandungan terperinci Tutorial aplikasi perangkak Java, penangkapan dan analisis data praktikal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!