相信很多商家在互联网上看到那海量的商业信息都会有这样的烦恼:

“面对这么多分布在不同网页的数据应该怎样才可收集汇总起来?”

“应该怎么收集这么多有用的信息?”

“怎样实现大批量网页数据采集?”

……


今天,小编就告诉大家应该如何采集和整理互联网上的海量数据。

一般来说,我们进行互联网数据采集和整理都选择一种简单又快捷的方法,那就是“爬虫”。

说到这很多朋友可能就要问了,爬虫这么好用,那么,一般人有什么便捷的方式可以实现么?

遗憾的是,用爬虫进行数据采集的方式,并没有什么傻瓜式的方法可以实现,大部分时候需要编写一个程序来完成。

在这里,我们首先需要解释一下爬虫的意思,所谓网络爬虫,指的是使用程序模拟用户浏览网页的行为,然后把浏览过程中看到的数据采集整理下来。我们通常会把爬虫程序分为三个部分:采集,处理,存储。爬虫会从一个或几个页面的链接开始,采集初始网页数据,通过对采集到的数据进行分析,筛选出需求数据进行整理并存储。


爬虫可以用来做什么?

搜索引擎:爬虫可以自动采集互联网中的信息并进行相应的存储或处理,在以后需要搜索某些内容的时候,可以在此前采集回来的数据中搜索,这样,就拥有了属于自己私人的搜索引擎。当然,要实现这样的目的,并不只依靠爬虫,还需要其他技术进行辅助。

数据对比:比如现在各大电商平台都有很多同样的商品出售,而这些商品在不同平台的售价往往都是不同的,这个时候,利用爬虫技术就可以获得每个网站的商品售价。

注意,本文仅仅是从技术层面介绍爬虫。使用爬虫时还需要留意相关的法律法规。


爬取数据的原理

以前是使用浏览器获取页面数据,使用爬虫就是模拟人打开浏览器访问服务器的过程。程序获取数据以后对页面数据进行分析并解析存储。


获取页面数据

对于数据的获取此处建议使用HttpClient技术,它实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)、支持自动转向、支持 HTTPS 协议、支持代理服务器、支持Cookie。


相关依赖


<!-- httpcomponents依赖,包含HttpClient --><dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.3</version></dependency><!-- 日志 --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.25</version></dependency><!-- 工具类 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.3.2</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version></dependency><!-- jsoup --><dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.10.3</version></dependency>


获取数据:

public static void main(String[] args) throws Exception {// 创建HttpClientCloseableHttpClient httpClient = HttpClients.createDefault();// 声明HttpGet请求对象// http://www.oschina.net/p/httpclientHttpGet httpGet = new HttpGet("https://www.zhipin.com/job_detail/43d2cafabb881ee83nd90ty1E1M~.html");// 设置请求头包含User-AgenthttpGet.setHeader("User-Agent", "");// 使用HttpClient发请求,会返回responseCloseableHttpResponse response = httpClient.execute(httpGet);// 判断响应状态码是否是200if (response.getStatusLine().getStatusCode() == 200) {// 判断是否有返回数据if (response.getEntity() != null) {// 如果是200,则请求成功,解析返回的数据String html = EntityUtils.toString(response.getEntity(), "UTF-8");// 把结果输出到文件// 第一个参数是输出的文件,第二个参数是输出的内容,第二个参数是编码FileUtils.writeStringToFile(new File("C:/Users/tree/Desktop/test.html"), html, "UTF-8");// 解析页面打印文档System.out.println(StringUtils.substringBetween(html,"<div class="job-sec">", "</div>"));}}}

Jsoup解析什么是Jsoup

jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。


3.2. 常用的API

查找元素

· getElementById(String id)


· getElementsByTag(String tag)


· getElementsByClass(String className)


· getElementsByAttribute(String key) (and related methods)


· Element siblings: siblingElements(), firstElementSibling(), lastElementSibling();nextElementSibling(), previousElementSibling()


· Graph: parent(), children(), child(int index)


元素数据

· attr(String key)获取属性attr(String key, String value)设置属性


· attributes()获取所有属性


· id(), className() and classNames()


· text()获取文本内容text(String value) 设置文本内容


· html()获取元素内HTMLhtml(String value)设置元素内的HTML内容


· outerHtml()获取元素外HTML内容


· data()获取数据内容(例如:script和style标签)


· tag() and tagName()


操作HTML和文本

· append(String html), prepend(String html)


· appendText(String text), prependText(String text)


· appendElement(String tagName), prependElement(String tagName)


· html(String value)


解析数据

从刚刚下载的test.html中解析数据


public static void main(String[] args) throws Exception {Document doc = Jsoup.parse(new File("C:/Users/tree/Desktop/test.html"), "UTF-8");// 使用dom方式获取数据Element element = doc.getElementsByClass("job-sec").child(0);System.out.println(element.text());}

点赞(0)
立即
投稿
发表
评论
返回
顶部
{__SCRIPT__}