JAVA로 간단한 웹 크롤러를 만드는 방법 ….(및 jsoup)

Python은 틀림없이 웹 스크래핑과 관련하여 사용할 수 있는 수많은 언어이지만 좋은 OLE JAVA에는 특전이 있습니다. 적어도 아직 파이썬을 깊이 파고들지 않은 저와 같은 JAVA 개발자에게는요. 바쁘더라도 걱정하지 마세요. 전체 코드는 이 게시물의 끝에 있습니다.

어쨌든 lulz를 위해 웹 크롤러 w/JAVA를 만드는 방법을 알고 싶었습니다. 드러내다. 생각보다 훨씬 쉬웠습니다. 먼저 jsoup을 다운로드해야 합니다(즉, 새 JAVA 프로젝트도 시작해야 함).

Link

이제 IntelliJ가 프로젝트를 만드는 마법을 수행하자마자 다운로드한 jsoup .jar 파일을 프로젝트 루트에 넣습니다.



이제 멋진 프로그래밍 원칙을 추가할 시간입니다. 맞습니까? 이 프로젝트에 필요한 가져오기는 다음과 같습니다.


import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import java.io.IOException;
import java.util.ArrayList;


다음 — 상수의 시간. 저는 CNN 웹사이트에서 링크(hrefs)를 색인화하기로 선택했습니다. 나는 FOX 뉴스의 열렬한 팬이 아니기 때문에 CNN bc를 선택했습니다.


public class Crawler {
    public static final String CNN = "https://edition.cnn.com/";
public static void main(String[] args) {
System.out.println("Web Crawler ")
 }
}


그런 다음 jsoup 라이브러리의 클러스터 방법을 활용하는 두 가지 방법이 필요합니다.
첫 번째는 해당 페이지의 "a href="를 인덱싱하는 재귀 방법입니다. 좋은 재귀 방법처럼 메서드를 무한대로 실행하지 않으려면 두 수준 아래에서 중지하도록 선택했습니다.

private static void crawl (int level, String url, ArrayList<String> visited) {
    if(level <=2 ) {
        Document doc = request(url, visited);
        if (doc!= null) {
            for (Element link : doc.select("a[href]")) {
                 String next_link = link.absUrl("href");
                 if(visited.contains(next_link) == false) {
                     crawl(level++, next_link, visited);
                 }
            }
        }
    }
}


그런 다음 연결을 확인하고 "Link"문자열 + 인덱싱된 URL을 반환하는 Document 메서드가 필요합니다.

private static Document request(String url, ArrayList<String> v) {
    try {
        Connection con = Jsoup.connect(url);
        Document doc = con.get();
        if(con.response().statusCode() == 200) {
            System.out.println("Link: " + url);
            System.out.println(doc.title());
            v.add(url);
            return doc;
        }
        return null;
    } catch (IOException e) {
        return null;
    }
}


이제 전체 코드를 실행할 준비가 되었습니다.

package.com.company
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;


public class Crawler {
    public static final String CNN = "https://edition.cnn.com/";


    public static void main(String[] args) {
      String url = CNN;
        crawl(1, url, new ArrayList<String>());

    }

    private static void crawl (int level, String url, ArrayList<String> visited) {
        if(level <=2 ) {
            Document doc = request(url, visited);
            if (doc!= null) {
                for (Element link : doc.select("a[href]")) {
                     String next_link = link.absUrl("href");
                     if(visited.contains(next_link) == false) {
                         crawl(level++, next_link, visited);
                     }
                }
            }
        }
    }
    private static Document request(String url, ArrayList<String> v) {
        try {
            Connection con = Jsoup.connect(url);
            Document doc = con.get();
            if(con.response().statusCode() == 200) {
                System.out.println("Link: " + url);
                System.out.println(doc.title());
                v.add(url);
                return doc;
            }
            return null;
        } catch (IOException e) {
            return null;
        }
    }
}


건배
https://boreatech.medium.com/

좋은 웹페이지 즐겨찾기