Je fais du crawling avec nutch 2.2 et les données que je récupère sont les metatags, comment extraire la valeur d'une div spécifique en html avec le crawling dans apache nutch
Réponses
Trop de publicités?Vous devrez écrire un plugin qui étendra HtmlParseFilter pour atteindre votre objectif.
Vous pouvez utiliser un parseur HTML tel que Jsoup pour extraire les URL que vous souhaitez et les ajouter en tant que liens sortants.
Implémentation d'un filtre HtmlParseFilter :-
public ParseResult filter(Content content, ParseResult parseResult,
HTMLMetaTags metaTags, DocumentFragment doc) {
// obtenir le contenu html
String htmlContent = new String(content.getContent(), StandardCharsets.UTF_8);
// analyser le html en utilisant jsoup ou une autre bibliothèque.
Document document = Jsoup.parse(content.toString(),content.getUrl());
Elements elements = document.select( newLinks=new ArrayList();
List outLinks=new ArrayList();
String absoluteUrl;
Outlink outLink;
for (Element element : elements){
absoluteUrl=element.absUrl("href");
if(includeLinks(absoluteUrl,value)) {
if(!newLinks.contains(absoluteUrl)){
newLinks.add(absoluteUrl);
outLink=new Outlink(absoluteUrl,element.text());
outLinks.add(outLink);
}
}
}
Parse parse = parseResult.get(content.getUrl());
ParseStatus status = parse.getData().getStatus();
Title title = document.title();
Outlink[] newOutLinks = (Outlink[])outLinks.toArray(new Outlink[outLinks.size()]);
ParseData parseData = new ParseData(status, title, newOutLinks, parse.getData().getContentMeta(), parse.getData().getParseMeta());
parseResult.put(content.getUrl(), new ParseText(elements.text()), parseData);
}
//retourner parseResult avec des liens sortants modifiés
return parseResult;
}
Construisez un nouveau plugin en utilisant ant et ajoutez un plugin dans nutch-site.xml.
plugin.includes
protocol-httpclient||urlfilter-regex|parse-(tika|html|js|css)|index-(basic|anchor)|query-(basic|site|url)|response-(json|xml)|summary-basic|scoring-opic|urlnormalizer-(pass|regex|basic)|indexer-elastic
Et dans parser-plugins.xml vous pouvez utiliser votre plugin personnalisé à la place du plugin par défaut utilisé par tika de cette manière :-