java web 抓取_java做web抓取
就像许多现代科技一样,从网站提取信息这一功能也有多个框架可以选择。最流行的有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抓取相关推荐
- 怎么用树莓派制作web服务器,用树莓派做web服务器,靠谱吗?
有点想入门树莓派,然后做一个小web服务器,放在学校内网. 大家有做过类似的事情吗? 做过,自己用做测试的话是没什么问题的,而且非常小巧,携带方便.买的时候注意还要搭配这三个配件 1 可以用的无线网卡 ...
- golang web php,golang 适合做web开发吗
使用go语言来做web开发,是非常方便的.如果不使用框架,仅仅使用net/http包,也能快速开发一个web应用.但是,官方包不支持RESTful风格的API,所以我们依然还是需要选择一个框架来帮助我 ...
- golang 实践配合 php 进行 web 开发,golang 适合做web开发吗
使用go语言来做web开发,是非常方便的.如果不使用框架,仅仅使用net/http包,也能快速开发一个web应用.但是,官方包不支持RESTful风格的API,所以我们依然还是需要选择一个框架来帮助我 ...
- java 拦截所有路径_Java或Web中解决所有路径问题
Java中使用的路径,分为两种:绝对路径和相对路径.归根结底,Java本质上只能使用绝对路径来寻找资源.所有的相对路径寻找资源的方法,都不过是一些便利方法.不过是API在底层帮助我们构建了绝对路径,从 ...
- java servlet深入理解_java 步步惊心 (web ) 深入理解servlet
用户在浏览器中输入一个网址回车,浏览器会向服务器发送一个HTTP请求. 服务器端程序接受这个请求,并对请求进行处理,然后发送回应,浏览收到回应,再把回应的内容显示出业. 这种请求-响应模式就是典型we ...
- java web 数据库操作_Java Web----Java Web的数据库操作(二)
Java Web的数据库操作 三.JDBC操作数据库 上一篇介绍了JDBC API,之后就可以通过API来操作数据库,实现对数据库的CRUD操作了. 下面仅以示例 的方式对数据库操作进行说明 1. 添 ...
- python写网站和java写网站的区别-做Web开发,编程语言用Python还是Java好呢?
虽然这个问题的出发点是Web开发,但是归根结底是基于两种语言的比较.无论知乎.贴吧及各大论坛,只要牵扯到编程语言,就容易引来各路英豪的"撕逼"大战,为了祖国和谐,人民安康,请各位看 ...
- java web 手机验证_Java 手机Web开发 身份验证
Java web和手机端开发 遇到比较麻烦的就是身份验证 目前为止觉得最好的解决方案是 Java 中使用jwt 为什么要使用jwt,让网络数据更加安全,以防其他一些人无意恶搞 在这里简单说下:jwt是 ...
- java web 数据库操作_Java Web----Java Web的数据库操作(三)
Java Web的数据库操作 前面介绍了JDBC技术和JDBC API及API的使用示例,下面详细介绍JDBC在Web中的应用. 四.JDBC在Java Web中的应用 通常情况下,Web程序操作数据 ...
最新文章
- eeglab教程系列(13)-学习和删除ICA组件
- 2017 清北济南考前刷题Day 2 afternoon
- BIM+GIS应用实战(听课笔记)
- 【渝粤教育】国家开放大学2018年春季 0699-21T阅读与写作 参考试题
- 前端学习(2783):封装myrequest并绑定到全局
- mysql cmd 实时监控_MySQL实时监控工具orztop的使用介绍
- JS-数据类型转换-运算符
- mysql主从、主主复制及高可用性
- sis地址获取器_TencentOS tiny深度源码分析(2)—— 调度器
- 为Mac任意命令设置快捷键
- 在VSCode中使用CUDA
- 【基于物理的渲染(PBR)白皮书】(四)法线分布函数相关总结
- 会写 Parser、Tokenizer 是什么水平?
- oracle 虚拟表 多行,Oracle使用虚拟表dual一次插入多条记录【摘录】
- 使用pandas清洗携程旅游数据
- Eaglestream平台下 取消BMC ACPI引发的host 无法power on 问题
- 2021-10-19大数据学习日志——数据埋点+网络爬虫——前端开发入门
- [Python] 二维数组初始化实践
- 360SEO 如何使用360分析工具来了解你的受众
- 修改linux时间EDT或EST为CST
热门文章
- php中json字符串转json对象数组对象,php – 将JSON字符串解析为数组,而不是对象
- python无角正方形的绘制_Python无角正方形,用while True怎么写?我写的这个只能画一行,哪个地方出问题了啊?...
- 【设计模式】第三章 单例模式
- Scala-列表操作
- MySQL常用查询语句积累
- 手掌手指分割算法(源码)
- WPF中查看PDF文件 - 基于开源的MoonPdfPanel (无需安装任何PDF阅读器)问题汇总
- 【.net 深呼吸】项目中是否有必要删去多余的引用
- Mesos源码分析(9): Test Framework的启动
- css学习之border 边框