java爬虫jsoup_Java爬虫之利用Jsoup自制简单的搜索引擎

内容导读

在上述代码中,url为输入词条(暂时仅限于英文),进入while循环可一直搜索,当输入为’exit’时退出。contentText为该词条的百度百科简介的网页形式,通过正则表达式将其中的文字提取出来。代码虽然简洁,但是功能还是蛮强大的,充分说明Java也是可以做爬虫的。

6969Jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。Jsoup的官方网址为: https://jsoup.org/, 其API使用手册网址为:https://jsoup.org/apidocs/overview-summary.html .6969本次分享将实现的功能为:利用Jsoup爬取某个搜索词语(暂仅限英文)的百度百科的介绍部分,具体的功能介绍可以参考博客:Python爬虫——自制简单的搜索引擎。在上篇爬虫中我们用Python进行爬取,这次,我们将用Java来做爬虫,你没看错,就是Java.6969在Eclipse中加入Jsoup包,下载网址为:https://jsoup.org/download .6969爬虫的具体代码如下:

package baiduScrape;/* * 本爬虫主要利用Java的Jsoup包进行网络爬取 * 本爬虫的功能: 爬取百度百科的开头介绍部分 * 使用方法: 输入关键字(目前只支持英文)即可 */import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import java.net.*;import java.io.*;import java.util.Scanner;public class BaiduScrape { public static void main(String[] args) { Scanner input = new Scanner(System.in); String baseUrl = "https://baike.baidu.com/item/"; String url = ""; // 如果输入文字不是"exit",则爬取其百度百科的介绍部分,否则退出该程序 while(true) { System.out.println("Enter the word(Enter 'exit' to exit):"); url = input.nextLine(); if(url.equals("exit")) { System.out.println("The program is over."); break; } String introduction = getContent(baseUrl+url); System.out.println(introduction+'\n'); } } // getContent()函数主要实现爬取输入文字的百度百科的介绍部分 public static String getContent(String url){ // 利用URL解析网址 URL urlObj = null; try{ urlObj = new URL(url); } catch(MalformedURLException e){ System.out.println("The url was malformed!"); return ""; } // URL连接 URLConnection urlCon = null; try{ urlCon = urlObj.openConnection(); // 打开URL连接 // 将HTML内容解析成UTF-8格式 Document doc = Jsoup.parse(urlCon.getInputStream(), "utf-8", url); // 刷选需要的网页内容 String contentText = doc.select("div.lemma-summary").first().text(); // 利用正则表达式去掉字符串中的"[数字]" contentText = contentText.replaceAll("\\[\\d+\\]", ""); return contentText; }catch(IOException e){ System.out.println("There was an error connecting to the URL"); return ""; } }}在上述代码中,url为输入词条(暂时仅限于英文),进入while循环可一直搜索,当输入为’exit’时退出。contentText为该词条的百度百科简介的网页形式,通过正则表达式将其中的文字提取出来。代码虽然简洁,但是功能还是蛮强大的,充分说明Java也是可以做爬虫的。6969接下来是愉快的测试时间:

f882ba9467fac7b7f0e89afac66afdd9.png

运行结果

6969本次分享到此结束,接下来也会持续更新Jsoup方面的相关知识,欢迎大家交流~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339762.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shader weaver_具有自定义汇编程序,Weaver和运行时的可插拔知识

shader weaver作为贝叶斯工作的一部分,我对Kie进行了很多重构,使其具有清晰的扩展点。 我想确保可以完成贝叶斯系统的所有工作部件,而无需在现有内核中添加任何代码。 因此,现在每种知识类型都可以拥有自己的包,汇编器…

matplotlib的默认字体_浅谈matplotlib默认字体设置探索

控制默认字体的设置根据官方文档https://matplotlib.org/tutorials/text/text_props.html#default-font可知:The base default font is controlled by a set of rcParams默认字体是由一组rcParams控制的。rcParamusage‘font.family"List of either names of f…

如何使用Apache Camel,Quarkus和GraalVM快速运行100个骆驼

今天,我继续在youtube上练习,并录制了10分钟的视频,介绍了如何创建一个新的Camel and Quarkus项目,该项目包括Rest和HTTP服务以及开箱即用的健康检查和指标。 然后比较以JVM模式运行示例与使用GraalVM编译的本机内存的使用情况。…

java空心菱形_java 空心菱形

分为两部分,先打印前四行,再打印后三行,int n 4;    //设初始值为4for(int i0;ifor(int j0;jSystem.out.print(" ");}for(int k0;kif(k0||k2*i) {    //打印前四行的*,中间部分输出空格System.out.print(&quo…

java接口版本控制_为什么要在Java中控制类和接口的可见性

java接口版本控制维护是软件开发的重要方面之一,并且经验证明,保持较低组件可视性的软件比暴露更多组件的软件更易于维护。 您不会在一开始就意识到它,但是在重新设计应用程序时会严重错过它。 由于保持向后兼容性是许多应用程序的“必须具备…

遮掩java_css之图片下方定位遮掩层

需要的效果如图,图片下方加个遮掩层:html:css:.listContent>div{width:300px;height: 300px;float: left;margin-top: 20px;margin-left: 20px;position:relative;}.mask{width:300px;height: 40px;background-color:#FFCCCC;p…

使用JDK的密码流的加密怪癖(以及如何做)

在我们的日常工作中,我们经常遇到经常性的主题,即将数据(例如文件)从一个位置传输到另一个位置。 这听起来像是一个非常简单的任务,但让我们通过声明这些文件可能包含机密信息并可以通过非安全的通信渠道进行传输这一事…

python中函数的定义实例_Python基础之函数的定义与使用实例

此文实例介绍了Python基础之函数的定义与使用。推荐给大伙学习一下,内容如下:Python 定义函数使用 def 关键字,一般格式如下:def 函数名(参数列表):函数体让我们使用函数来输出"Hello World!"&am…

log4j 程序日志_使用log4j监视和筛选应用程序日志到邮件

log4j 程序日志在今天的帖子中,我将向您展示如何将日志语句过滤为警告电子邮件。 这是出于监视我正在处理的一个应用程序的一些关键点的需要。 您可以使用一些工具来执行应用程序监视。 我不会详细介绍这些工具,但有时让应用程序发送警告电子邮件会更容易…

python切换消息窗_用Python切换窗口

The way that user had defined find_window only allows you to choose by the classname of the window用户定义它的方式是将这两个参数class_name和window_name传递给^{}(后者反过来只调用Win32 API函数^{})。所以,就这样做:windowmgr.find_window(No…

Java UnknownHostException –服务器的无效主机名–如何解决?

An UnknownHostException的快速指南,如果在为远程方法调用创建到远程主机的连接时发生java.net.UnknownHostException,则会抛出该快速指南。 UnknownHostException的预防方法。 1.简介 在本教程中,我们将学习什么是UnknownHostException以及…

mongodb连接java_如何从Java EE无状态应用程序连接到MongoDB

mongodb连接java在本文中,我将介绍如何从无状态Java EE应用程序连接到MongoDB,以利用与MongoDB Java驱动程序提供的数据库的内置连接池。 如果您开发的REST API对MongoDB执行操作,则可能是这种情况。 获取Java MongoDb驱动程序 要将Java连接…

学java专科_专科学历可以学习java开发吗

学习Java的热潮越来越高涨,除了转行而来的人,很多刚毕业的学生也加入到其中。很多人都觉得学习Java需要有一个高学历作为基础,一些专科生在学习之前会犹豫,他们是否能学习Java,首先学程序开发,入行Java开发…

具有InlfuxDB的Spring Boot和Micrometer第3部分:Servlet和JDBC

在上一个博客中,我们使用由InfluxDB支持的千分尺设置了反应式应用程序。 在本教程中,我们将使用传统的带JDBC阻塞式Servlet的Spring Stack。 我选择的数据库是postgresql。 我将使用与先前博客文章相同的脚本。 因此,我们将拥有初始化数据库…

java linkedlist实例_Java Linkedlist原理及实例详解

这篇文章主要介绍了Java Linkedlist原理及实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下定义:linkedlist属于链表结构,方便添加和删除元素,但查询不方便&#xff0c…

jsf xhtml调用方法_JSF的工作方式以及调试方法–可以使用polyglot吗?

jsf xhtml调用方法JSF不是我们通常认为的那样。 这也是一个调试起来可能有些棘手的框架,尤其是在初次遇到时。 在这篇文章中,让我们继续探讨为什么会出现这种情况,并提供一些JSF调试技术。 我们将讨论以下主题: JSF不是我们经常想…

java 分别编译_Java源文件和编译后的文件扩展名分别为()_学小易找答案

【单选题】( )下列关于逻辑运算符AND,描述正确的是哪一项?【单选题】如果声明一个类时使用abstract修饰符,则表明该类是()【填空题】要查询student表中name字段值以字符“m”开始,以字符“d”结束的记录应该在WHERE子句后跟 LIKE________。【填空题】不允许在关系中出现重复记…

将Auth0 OIDC(OAUTH 2)与授权(组和角色)集成

如果您正在使用Auth0对多个现有应用程序中的用户进行身份验证和授权,则可能需要将下一个Web应用程序与Auth0集成。 有多种方法可以执行此操作,例如,如果要将Jenkins与Auth0集成,则可以使用SAML v2;否则,可…

power of two java_LeetCode算法题-Power Of Two(Java实现)

这是悦乐书的第194次更新,第200篇原创01 看题和准备今天介绍的是LeetCode算法题中Easy级别的第56题(顺位题号是231)。给定一个整数,写一个函数来确定它是否是2的幂。例如:输入:1输出:true说明:2^0 1输入&a…

tomee_一罐将其全部统治:Apache TomEE + Shrinkwrap == JavaEE引导

tomee警告:我不是Spring Boot的专家。 我发现很多事情对此非常有趣,并且当然可以真正改善您的日常工作。 而且,我对Spring Boot没有任何反对,也没有开发或使用它的人。 但是我认为社区高估了该产品。 一年前,我开始收…