В то время как 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, ArrayListvisited) { 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, ArrayListv) { 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”