O Web Scraping também é chamado de raspagem de dados, coleta da Web ou rastreamento da Web, que é usado para extrair dados das páginas da Web. Um web scraper pode usar diferentes abordagens para extrair informações. Por exemplo, XPath, seletores CSS, filtros personalizados, navegação HTML, etc. De acordo com esses cenários, este artigo aborda como criar um web scraper programaticamente em Java.
- Configuração da biblioteca Java Web Scraping
- Web Scraping com navegação HTML em Java
- Web Scraping usando XPath Query em Java
- Web Scraping com CSS Selector em Java
Configuração da biblioteca Java Web Scraping
Aspose.HTML for Java API oferece suporte a recursos de web scraping usando diferentes técnicas. Você pode simplesmente acessar a API baixando os arquivos JAR da página Downloads ou usar as seguintes configurações do Maven no arquivo pom.xml do seu projeto:
Repositório:
<repositories>
<repository>
<id>snapshots</id>
<name>repo</name>
<url>http://repository.aspose.com/repo/</url>
</repository>
</repositories>
Dependência:
<dependencies>
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-html</artifactId>
<version>21.12</version>
<classifier>jdk17</classifier>
</dependency>
</dependencies>
Web Scraping com navegação HTML em Java
Você pode trabalhar com a classe Node para navegar nas páginas HTML. O snippet de código abaixo demonstra como navegar em um documento HTML em Java:
// Preparar um código HTML
String html_code = "<span>Hello</span> <span>World!</span>";
// Inicializar um documento a partir do código preparado
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(html_code, ".");
try {
// Obter a referência ao primeiro filho (primeiro SPAN) do BODY
com.aspose.html.dom.Element element = document.getBody().getFirstElementChild();
System.out.println(element.getTextContent()); // output: Hello
// Obtenha a referência ao segundo elemento SPAN
element = element.getNextElementSibling();
System.out.println(element.getTextContent()); // output: World!
} finally {
if (document != null) {
document.dispose();
}
}
Inspeção do documento HTML e seus elementos em Java
Você pode trabalhar com o método de travessia do elemento para navegar pelas páginas HTML. O exemplo de código abaixo detalha como inspecionar documentos HTML em Java.
// Carregar um documento de um arquivo
String documentPath = "html_file.html";
var document = new com.aspose.html.HTMLDocument(documentPath);
{
// Obter o elemento html do documento
var element = document.getDocumentElement();
System.out.println(element.getTagName()); // HTML
// Obter o último elemento do elemento html
element = element.getLastElementChild();
System.out.println(element.getTagName()); // BODY
// Obter o primeiro elemento do elemento body
element = element.getFirstElementChild();
System.out.println(element.getTagName()); // H1
System.out.println(element.getTextContent()); // Header 1
}
Uso de filtro personalizado para Web Scraper em Java
Você pode definir um filtro personalizado para ignorar ou aceitar filtros específicos para trabalhar com o web scraper em Java. O exemplo de código abaixo explica como trabalhar com filtros personalizados ou definidos pelo usuário em um web scraper usando Java:
public class OnlyImageFilter extends com.aspose.html.dom.traversal.filters.NodeFilter {
@Override
public short acceptNode(com.aspose.html.dom.Node n) {
// O filtro atual ignora todos os elementos, exceto os elementos IMG.
return "img".equals(n.getLocalName()) ? FILTER_ACCEPT : FILTER_SKIP;
}
}
Posteriormente, depois de configurar um filtro personalizado, você pode navegar facilmente em uma página HTML usando o snippet de código abaixo:
// Preparar um código HTML
String code = " < p > Hello </p >\n" +
" <img src = 'image1.png' >\n" +
" <img src = 'image2.png' >\n" +
" <p > World ! </p >\n";
// Inicializar um documento com base no código preparado
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
// Para iniciar a navegação HTML, precisamos criar uma instância do TreeWalker.
// Os parâmetros especificados significam que ele começa a andar da raiz do documento, iterando todos os nós e usando nossa implementação personalizada do filtro
com.aspose.html.dom.traversal.ITreeWalker iterator = document.createTreeWalker(document, com.aspose.html.dom.traversal.filters.NodeFilter.SHOW_ALL, new OnlyImageFilter());
// Usar
while (iterator.nextNode() != null) {
// Como estamos usando nosso próprio filtro, o nó atual sempre será uma instância do HTMLImageElement.
// Portanto, não precisamos das validações adicionais aqui.
com.aspose.html.HTMLImageElement image = (com.aspose.html.HTMLImageElement) iterator.getCurrentNode();
System.out.println(image.getSrc());
// saída: imagem1.png
// saída: image2.png
}
} finally {
if (document != null) {
document.dispose();
}
}
Web Scraping usando XPath Query em Java
Você pode selecionar diferentes nós de um documento HTML por diferentes critérios usando XPath. O código abaixo demonstra como realizar web scraping usando XPath Query em Java:
// Preparar um código HTML
String code = "< div class='happy' >\n" +
" <div >\n" +
" <span > Hello ! </span >\n" +
" </div >\n" +
" </div >\n" +
" <p class='happy' >\n" +
" <span > World </span >\n" +
" </p >\n";
// Inicializar um documento com base no código preparado
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
// Aqui avaliamos a expressão XPath onde selecionamos todos os elementos SPAN filhos de elementos cujo atributo 'class' é igual a 'happy':
com.aspose.html.dom.xpath.IXPathResult result = document.evaluate("//*[@class='happy']//span",
document,
null,
com.aspose.html.dom.xpath.XPathResultType.Any,
null
);
// Iterar sobre os nós resultantes
for (com.aspose.html.dom.Node node; (node = result.iterateNext()) != null; ) {
System.out.println(node.getTextContent());
// saída: Olá
// saída: Mundo!
}
} finally {
if (document != null) {
document.dispose();
}
}
Web Scraping com CSS Selector em Java
Você pode pesquisar os itens necessários em um web scraper usando o seletor CSS. Você pode especificar um parâmetro como um seletor de consulta e, em seguida, uma lista de correspondência do seletor é retornada ao web scraper. O exemplo de código a seguir mostra como usar o seletor CSS em um web scraper usando Java:
// Preparar um código HTML
String code = "< div class='happy' >\n" +
" <div >\n" +
" <span > Hello </span >\n" +
" </div >\n" +
" </div >\n" +
" <p class='happy' >\n" +
" <span > World ! </span >\n" +
" </p >\n";
// Inicializar um documento com base no código preparado
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
// Aqui criamos um seletor CSS que extrai todos os elementos cujo atributo 'class' é igual a 'happy' e seus elementos filhos SPAN
com.aspose.html.collections.NodeList elements = document.querySelectorAll(".happy span");
// Iterar sobre a lista de elementos resultante
elements.forEach(element ->{
System.out.println(((com.aspose.html.HTMLElement) element).getInnerHTML());
// saída: Olá
// saída: Mundo!
});
} finally {
if (document != null) {
document.dispose();
}
}
Conclusão
Neste artigo, você explorou diferentes métodos que podem ser usados para criar um web scraper em Java. Você só precisa fazer algumas chamadas de API usando a biblioteca Aspose.HTML for Java para criar um web scraper em Java. Você pode explorar as técnicas de navegação HTML, seletor de CSS, filtro personalizado e consulta XPath neste artigo. Além disso, sinta-se à vontade para entrar em contato conosco através do fórum se precisar de mais informações ou assistência.