就像许多现代科技一样,从网站提取信息这一功能也有多个框架可以选择。最流行的有JSoup、HTMLUnit和Selenium WebDriver。我们这篇文章讨论JSoup。JSoup是个开源项目,提供强大的数据提取API。可以用它来解析给定URL、文件或字符串中的HTML。它还能操纵HTML元素和属性。

org.jsoup

jsoup

1.11.3

public static voidmain(String[] args) {

String html= "

Website title

Sample paragraph number 1

Sample paragraph number 2

";

Document doc=Jsoup.parse(html);

System.out.println(doc.title());

Elements paragraphs= doc.getElementsByTag("p");for(Element paragraph : paragraphs) {

System.out.println(paragraph.text());

}

调用parse()方法可以解析输入的HTML,将其变成Document对象。调用该对象的方法就能操纵并提取数据。

在上面的例子中,我们首先输出页面的标题。然后,我们获取所有带有标签“p”的元素。然后我们依次输出每个段落的文本。

运行这段代码,我们可以得到以下输出:

Website title

Sample paragraph number1Sample paragraph number2

使用JSoup解析URL

解析URL的方法跟解析字符串有点不一样,但基本原理是相同的:

public classJSoupExample {public static void main(String[] args) throwsIOException {

Document doc= Jsoup.connect("https://www.wikipedia.org").get();

Elements titles= doc.getElementsByClass("other-project");for(Element title : titles) {

System.out.println(title.text());

}

}

}

要从URL抓取数据,需要调用connect()方法,提供URL作为参数。然后使用get()从连接中获取HTML。这个例子的输出为:

Commons Freely usable photos &more

Wikivoyage Free travel guide

Wiktionary Free dictionary

Wikibooks Free textbooks

Wikinews Free news source

Wikidata Free knowledge base

Wikiversity Free course materials

Wikiquote Free quote compendium

MediaWiki Free&open wiki application

Wikisource Free library

Wikispecies Free species directory

Meta-Wiki Community coordination & documentation

可以看到,这个程序抓取了所有class为other-project的元素。

public void allLinksInUrl() throwsIOException {

Document doc= Jsoup.connect("https://www.wikipedia.org").get();

Elements links= doc.select("a[href]");for(Element link : links) {

System.out.println("\nlink : " + link.attr("href"));

System.out.println("text : " +link.text());

}

}

运行结果是一个很长的列表:

使用JSoup解析文件

public void parseFile() throwsURISyntaxException, IOException {

URL path= ClassLoader.getSystemResource("page.html");

File inputFile= newFile(path.toURI());

Document document= Jsoup.parse(inputFile, "UTF-8");

System.out.println(document.title());//parse document in any way

}

如果要解析文件,就不需要给网站发送请求,因此不用担心运行程序会给服务器增添太多负担。尽管这种方法有许多限制,并且数据是静态的,因而不适合许多任务,但它提供了分析数据的更合法、更无害的方式。

得到的文档可以用前面说过的任何方式解析。

java web 抓取_java做web抓取相关推荐

  1. 怎么用树莓派制作web服务器,用树莓派做web服务器,靠谱吗?

    有点想入门树莓派,然后做一个小web服务器,放在学校内网. 大家有做过类似的事情吗? 做过,自己用做测试的话是没什么问题的,而且非常小巧,携带方便.买的时候注意还要搭配这三个配件 1 可以用的无线网卡 ...

  2. golang web php,golang 适合做web开发吗

    使用go语言来做web开发,是非常方便的.如果不使用框架,仅仅使用net/http包,也能快速开发一个web应用.但是,官方包不支持RESTful风格的API,所以我们依然还是需要选择一个框架来帮助我 ...

  3. golang 实践配合 php 进行 web 开发,golang 适合做web开发吗

    使用go语言来做web开发,是非常方便的.如果不使用框架,仅仅使用net/http包,也能快速开发一个web应用.但是,官方包不支持RESTful风格的API,所以我们依然还是需要选择一个框架来帮助我 ...

  4. java 拦截所有路径_Java或Web中解决所有路径问题

    Java中使用的路径,分为两种:绝对路径和相对路径.归根结底,Java本质上只能使用绝对路径来寻找资源.所有的相对路径寻找资源的方法,都不过是一些便利方法.不过是API在底层帮助我们构建了绝对路径,从 ...

  5. java servlet深入理解_java 步步惊心 (web ) 深入理解servlet

    用户在浏览器中输入一个网址回车,浏览器会向服务器发送一个HTTP请求. 服务器端程序接受这个请求,并对请求进行处理,然后发送回应,浏览收到回应,再把回应的内容显示出业. 这种请求-响应模式就是典型we ...

  6. java web 数据库操作_Java Web----Java Web的数据库操作(二)

    Java Web的数据库操作 三.JDBC操作数据库 上一篇介绍了JDBC API,之后就可以通过API来操作数据库,实现对数据库的CRUD操作了. 下面仅以示例 的方式对数据库操作进行说明 1. 添 ...

  7. python写网站和java写网站的区别-做Web开发,编程语言用Python还是Java好呢?

    虽然这个问题的出发点是Web开发,但是归根结底是基于两种语言的比较.无论知乎.贴吧及各大论坛,只要牵扯到编程语言,就容易引来各路英豪的"撕逼"大战,为了祖国和谐,人民安康,请各位看 ...

  8. java web 手机验证_Java 手机Web开发 身份验证

    Java web和手机端开发 遇到比较麻烦的就是身份验证 目前为止觉得最好的解决方案是 Java 中使用jwt 为什么要使用jwt,让网络数据更加安全,以防其他一些人无意恶搞 在这里简单说下:jwt是 ...

  9. java web 数据库操作_Java Web----Java Web的数据库操作(三)

    Java Web的数据库操作 前面介绍了JDBC技术和JDBC API及API的使用示例,下面详细介绍JDBC在Web中的应用. 四.JDBC在Java Web中的应用 通常情况下,Web程序操作数据 ...

最新文章

  1. eeglab教程系列(13)-学习和删除ICA组件
  2. 2017 清北济南考前刷题Day 2 afternoon
  3. BIM+GIS应用实战(听课笔记)
  4. 【渝粤教育】国家开放大学2018年春季 0699-21T阅读与写作 参考试题
  5. 前端学习(2783):封装myrequest并绑定到全局
  6. mysql cmd 实时监控_MySQL实时监控工具orztop的使用介绍
  7. JS-数据类型转换-运算符
  8. mysql主从、主主复制及高可用性
  9. sis地址获取器_TencentOS tiny深度源码分析(2)—— 调度器
  10. 为Mac任意命令设置快捷键
  11. 在VSCode中使用CUDA
  12. 【基于物理的渲染(PBR)白皮书】(四)法线分布函数相关总结
  13. 会写 Parser、Tokenizer 是什么水平?
  14. oracle 虚拟表 多行,Oracle使用虚拟表dual一次插入多条记录【摘录】
  15. 使用pandas清洗携程旅游数据
  16. Eaglestream平台下 取消BMC ACPI引发的host 无法power on 问题
  17. 2021-10-19大数据学习日志——数据埋点+网络爬虫——前端开发入门
  18. [Python] 二维数组初始化实践
  19. 360SEO 如何使用360分析工具来了解你的受众
  20. 修改linux时间EDT或EST为CST

热门文章

  1. php中json字符串转json对象数组对象,php – 将JSON字符串解析为数组,而不是对象
  2. python无角正方形的绘制_Python无角正方形,用while True怎么写?我写的这个只能画一行,哪个地方出问题了啊?...
  3. 【设计模式】第三章 单例模式
  4. Scala-列表操作
  5. MySQL常用查询语句积累
  6. 手掌手指分割算法(源码)
  7. WPF中查看PDF文件 - 基于开源的MoonPdfPanel (无需安装任何PDF阅读器)问题汇总
  8. 【.net 深呼吸】项目中是否有必要删去多余的引用
  9. Mesos源码分析(9): Test Framework的启动
  10. css学习之border 边框