java做web抓取
就像许多现代科技一样,从网站提取信息这一功能也有多个框架可以选择。最流行的有JSoup、HTMLUnit和Selenium WebDriver。我们这篇文章讨论JSoup。JSoup是个开源项目,提供强大的数据提取API。可以用它来解析给定URL、文件或字符串中的HTML。它还能操纵HTML元素和属性。
<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.</version>
</dependency>
public static void main(String[] args) { String html = "<html><head><title>Website title</title></head><body><p>Sample paragraph number 1 </p><p>Sample paragraph number 2</p></body></html>"; 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 number 1 Sample paragraph number 2
使用JSoup解析URL
解析URL的方法跟解析字符串有点不一样,但基本原理是相同的:
public class JSoupExample { public static void main(String[] args) throws IOException { 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() throws IOException { 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() throws URISyntaxException, IOException { URL path = ClassLoader.getSystemResource("page.html"); File inputFile = new File(path.toURI()); Document document = Jsoup.parse(inputFile, "UTF-8"); System.out.println(document.title()); //parse document in any way }
如果要解析文件,就不需要给网站发送请求,因此不用担心运行程序会给服务器增添太多负担。尽管这种方法有许多限制,并且数据是静态的,因而不适合许多任务,但它提供了分析数据的更合法、更无害的方式。
得到的文档可以用前面说过的任何方式解析。
java做web抓取的更多相关文章
- 如何用 Python 实现 Web 抓取?
[编者按]本文作者为 Blog Bowl 联合创始人 Shaumik Daityari,主要介绍 Web 抓取技术的基本实现原理和方法.文章系国内 ITOM 管理平台 OneAPM 编译呈现,以下为正 ...
- python自动化之web抓取
''' 从web抓取数据: webbrowser:是python自带的,打开浏览器获取指定页面. requests:从因特网上下载文件和网页. Beautiful Soup:解析HTML,即网页编写的 ...
- python Web抓取(一)[没写完]
需要的模块: python web抓取通过: webbrowser:是python自带的,打开浏览器获取指定页面 requests:从因特网上下载文件和网页 Beautiful Soup:解析HTML ...
- java做web项目比较多
WEB就是轻量级:如果要炫,FLEX或即将普及的html5.0都能做到像C/S那样. java做web项目比较多:如果是桌面程序,还是走C/S比较成熟. 如果是B/S架构的,后台还是JAVA,前台可以 ...
- 用python做网页抓取与解析入门笔记[zz]
(from http://chentingpc.me/article/?id=961) 事情的起因是,我做survey的时候搜到了这两本书:Computational Social Network A ...
- java使用urlConnection抓取部分数据乱码
使用urlconnection做抓取的同学应该一开始都是使用这个吧.OK回到正题来..... 在内容己有中文.英文己正常显示,仍然会有部分中文或英文出现乱码,这是为什么呢?这个问题一直在心里盘旋... ...
- Java Jsoup Spider抓取数据入库
这里从车商网上进行数据抓取,请保持良好的职业道德不要将数据用于商业途径.工信部官网有汽车方面的公告目录,那里有最全的pdf或word数据,鉴于word和pdf解析的繁琐和耗时,我暂时用这个网站的数据进 ...
- Java实现网页抓取的一个Demo
这个小案例的话我是存放在我的github 上. 下面给出链接自己可以去看下,也可以直接下载源码.有具体的说明 <Java网页抓取>
- 通过Java进行网页抓取并生成plist创建代码
抓取网页的方法: 抓取网页可以通过正则表达式也可以通过Java. 通过firefox浏览器,安装Firebug来查看网页的源代码. 首先将要抓取的部分保存到本地,步骤如下: 1.在要抓取的位置右键,选 ...
随机推荐
- L155
Wireless Festival has been given permission to remain in London's Finsbury Park, provided performers ...
- vue.js 源代码学习笔记 ----- 工具方法 lang
/* @flow */ // Object.freeze 使得这个对象不能增加属性, 修改属性, 这样就保证了这个对象在任何时候都是空的 export const emptyObject = Obje ...
- cookies分类
Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie. 内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的.硬盘Cooki ...
- Django项目的ORM操作之--模型类数据查询
1.查询基本格式及理解: 类名.objects.[查询条件] 例如我们要查询数据库中一张表(bookinfo)的所有数据,sql语句为:select * from bookinfo, 对应模型类的操作 ...
- 访问IO设备
http://blog.csdn.net/goodluckwhh/article/details/16986871 内存屏障主要解决的问题是编译器的优化和CPU的乱序执行.编译器在优化的时候,生成的汇 ...
- Ubuntu下改变文件权限
Ubuntu下改变权限 有问题,待解决!! 参考:修改linux文件权限命令:chmod 起因:init 0 指令能在普通用户下调用,很方! 指令 chmod 格式: chmod 000 xxx.x ...
- vue之全局守卫
Vue的路由守卫是什么东西呢? 第一次接触很懵逼,知道自己遇到了这样一个需求, 在页面之间进行路由跳转时,需要进行一个判断,如果下一个页面是需要登录后才能进入的页面,那么就需要在点击进入该页面的时候进 ...
- 【javascript】如何延迟加载JavaScript(Google推荐的代码)
下面是Google推荐的代码.这些代码应被放置在</body>标签前(接近HTML文件底部)<script type="text/javascript">f ...
- BZOJ1563 NOI2009 诗人小G【决策单调性优化DP】
LINK 因为是图片题就懒得挂了 简要题意:有n个串,拼接两个串需要加一个空格,给你l和p,问你拼接后每个串的总长减l的绝对值的p次方的最小值 首先打表发现一下这题是决策单调的对于所有数据都成立就当他 ...
- python面试题(十)
Python中基本数据结构的操作 元组 列表 字典 集合 定义 新增 更改 删除 2.请尽可能列举python列表的成员方法,并给出一下列表操作的答案: (1)a=[1, 2, 3, 4, 5], a ...