Рубрики
Без рубрики

Как создать простой webcrawler с JAVA …. (и jsoup)

В то время как Python, возможно, является языком numero uno, который можно использовать, когда дело доходит до веб-очистки, good ole JAVA h… С тегами java, web dev, web, datascience.

В то время как Python, возможно, является языком numero uno, который можно использовать, когда дело доходит до очистки веб-страниц, у хорошей ole JAVA есть свои преимущества. По крайней мере, для такого разработчика JAVA, как я, который еще не совсем вник в Python. Если вы спешите, не волнуйтесь. Полный код можно найти в конце этого поста.

В любом случае, я хотел выяснить, как создать webcrawler с JAVA, просто для лулзов на самом деле. Оказывается. Это оказалось намного проще, чем ожидалось. Прежде всего, вам нужно скачать jsoup (то есть вам также нужно запустить новый JAVA-проект)

Ссылка

Теперь, как только 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;

Далее — его постоянное время. Я решил проиндексировать ссылки (hrefs) на веб-сайте CNN. Я выбрал CNN, потому что я не большой поклонник FOX news.

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=”s. Чтобы метод не блуждал в бесконечности, как это делает хороший рекурсивный метод, я решил остановить его на два уровня ниже.

private static void crawl (int level, String url, ArrayList 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);
                 }
            }
        }
    }
}

И тогда нам нужен метод Document, который проверяет наличие соединения и возвращает строку “Link ” + URL-адрес, который индексируется.

private static Document request(String url, ArrayList 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());

    }

    private static void crawl (int level, String url, ArrayList 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 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/

Оригинал: “https://dev.to/code_runner/how-to-make-a-simple-webcrawler-with-java-and-jsoup-434p”