Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

จะอ่านเนื้อหาของหน้าเว็บเป็นสตริงใน java ได้อย่างไร?


คุณสามารถอ่านเนื้อหาของหน้าเว็บได้หลายวิธีโดยใช้ Java เราจะมาพูดถึงสามคนนี้กัน

การใช้เมธอด openStream()

URL คลาสของแพ็คเกจ java.net แสดงถึง Uniform Resource Locator ซึ่งใช้เพื่อชี้ทรัพยากร (ไฟล์หรือไดเร็กทอรีหรือข้อมูลอ้างอิง) ในเวิลด์ไวด์เว็บ

openStream() เมธอดของคลาสนี้จะเปิดการเชื่อมต่อกับ URL ที่แสดงโดยอ็อบเจ็กต์ปัจจุบันและส่งคืนออบเจ็กต์ InputStream ซึ่งคุณสามารถอ่านข้อมูลจาก URL ได้

ดังนั้นหากต้องการอ่านข้อมูลจากหน้าเว็บ (โดยใช้คลาส URL) −

  • สร้างอินสแตนซ์คลาส java.net.URL โดยส่ง URL ของหน้าเว็บที่ต้องการเป็นพารามิเตอร์ไปยังตัวสร้าง

  • เรียกใช้เมธอด openStream() และดึงออบเจ็กต์ InputStream

  • สร้างอินสแตนซ์คลาส Scanner โดยส่งอ็อบเจ็กต์ InputStream ที่ดึงมาด้านบนเป็นพารามิเตอร์

ตัวอย่าง

import java.io.IOException;
import java.net.URL;
import java.util.Scanner;
public class ReadingWebPage {
   public static void main(String args[]) throws IOException {
      //Instantiating the URL class
      URL url = new URL("https://www.something.com/");
      //Retrieving the contents of the specified page
      Scanner sc = new Scanner(url.openStream());
      //Instantiating the StringBuffer class to hold the result
      StringBuffer sb = new StringBuffer();
      while(sc.hasNext()) {
         sb.append(sc.next());
         //System.out.println(sc.next());
      }
      //Retrieving the String from the String Buffer object
      String result = sb.toString();
      System.out.println(result);
      //Removing the HTML tags
      result = result.replaceAll("<[^>]*>", "");
      System.out.println("Contents of the web page: "+result);
   }
}

ผลลัพธ์

<html><body><h1>Itworks!</h1></body></html>
Contents of the web page: Itworks!

การใช้ HttpClient

ไคลเอ็นต์ Http เป็นไลบรารีการโอนย้าย ซึ่งอยู่ที่ฝั่งไคลเอ็นต์ ส่งและรับข้อความ HTTP มีการใช้งานที่ทันสมัย ​​มีคุณลักษณะหลากหลาย และมีประสิทธิภาพซึ่งตรงตามมาตรฐาน HTTP ล่าสุด

คำขอ GET (ของโปรโตคอล Http) ใช้เพื่อดึงข้อมูลจากเซิร์ฟเวอร์ที่กำหนดโดยใช้ URI ที่กำหนด คำขอที่ใช้ GET ควรดึงข้อมูลเท่านั้นและไม่ควรมีผลกระทบอื่นกับข้อมูล

HttpClient API จัดเตรียมคลาสที่ชื่อ HttpGet ซึ่งแสดงถึงวิธีการรับคำขอ เพื่อดำเนินการตามคำขอ GET และดึงเนื้อหาของหน้าเว็บ -

  • createDefault() เมธอดของคลาส HttpClients ส่งคืนออบเจ็กต์ CloseableHttpClient ซึ่งเป็นการใช้งานพื้นฐานของอินเทอร์เฟซ HttpClient ใช้วิธีนี้สร้างวัตถุ HttpClient

  • สร้างคำขอ HTTP GET โดยสร้างอินสแตนซ์คลาส HttpGet ตัวสร้างของคลาสนี้ยอมรับค่า String ที่แสดง URI ของหน้าเว็บที่คุณต้องการส่งคำขอ

  • ดำเนินการตามคำขอ HttpGet โดยเรียกใช้ execute() วิธีการ

  • เรียกวัตถุ InputStream ที่แสดงเนื้อหาของเว็บไซต์จากการตอบกลับเป็น -

httpresponse.getEntity().getContent()

ตัวอย่าง

import java.util.Scanner;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
public class HttpClientExample {
   public static void main(String args[]) throws Exception{
      //Creating a HttpClient object
      CloseableHttpClient httpclient = HttpClients.createDefault();
      //Creating a HttpGet object
      HttpGet httpget = new HttpGet("https://www.something.com/");
      //Executing the Get request
      HttpResponse httpresponse = httpclient.execute(httpget);
      Scanner sc = new Scanner(httpresponse.getEntity().getContent());
      //Instantiating the StringBuffer class to hold the result
      StringBuffer sb = new StringBuffer();
      while(sc.hasNext()) {
         sb.append(sc.next());
         //System.out.println(sc.next());
      }
      //Retrieving the String from the String Buffer object
      String result = sb.toString();
      System.out.println(result);
      //Removing the HTML tags
      result = result.replaceAll("<[^>]*>", "");
      System.out.println("Contents of the web page: "+result);
   }
}

ผลลัพธ์

<html><body><h1>Itworks!</h1></body></html>
Contents of the web page: Itworks!

การใช้ไลบรารี Jsoup

Jsoup เป็นไลบรารีที่ใช้ Java เพื่อทำงานกับเนื้อหาที่ใช้ HTML มี API ที่สะดวกมากในการแยกและจัดการข้อมูลโดยใช้วิธี DOM, CSS และ jquery-like ที่ดีที่สุด มันใช้ข้อกำหนด WHATWG HTML5 และแยกวิเคราะห์ HTML ให้เป็น DOM เดียวกันกับเบราว์เซอร์สมัยใหม่

ในการดึงเนื้อหาของหน้าเว็บโดยใช้ไลบรารี Jsoup -

  • เชื่อมต่อ() เมธอดของคลาส Jsoup ยอมรับ URL ของหน้าเว็บและเชื่อมต่อกับหน้าเว็บที่ระบุและส่งคืนอ็อบเจ็กต์การเชื่อมต่อ เชื่อมต่อกับหน้าเว็บที่ต้องการโดยใช้ connect() วิธีการ

  • เมธอด get() ของอินเทอร์เฟซการเชื่อมต่อจะส่ง/ดำเนินการคำขอ GET และส่งคืนเอกสาร HTML เป็นอ็อบเจ็กต์ของคลาสเอกสาร ส่งคำขอ GET ไปยังเพจโดยเรียกใช้เมธอด get()

  • ดึงเนื้อหาของเอกสารที่ได้รับเป็นสตริงเป็น −

String result = doc.body().text();

ตัวอย่าง

import java.io.IOException;
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class JsoupExample {
   public static void main(String args[]) throws IOException {
      String page = "https://www.something.com/";
      //Connecting to the web page
      Connection conn = Jsoup.connect(page);
      //executing the get request
      Document doc = conn.get();
      //Retrieving the contents (body) of the web page
      String result = doc.body().text();
      System.out.println(result);
   }
}

ผลลัพธ์

It works!