一、前言

说起爬虫,很多人第一反应是使用 Python 语言。但是 Java 爬虫方面也是相当成熟的,使用 Jsoup、HttpClient、HtmlUnit
就可以实现基本的需求。

【爬虫商业应用】
①爬虫还是一个可以盈利的技术,很多网站的收集的内容的重要来源就是使用爬虫技术。
②内容丰富后,可以大大提高个人网站的日流量,通过帮Google等打广告获取资金。
③收集各种优质的资源,聚合在一起,还可以拿出来在淘宝、个人网站等拍卖获利
④等等…

说到底,爬虫是一个实实在在地可以用来赚钱的技术。
当然在做项目的时候,也是有帮助的,比如做一篇文章的缩略图,就可以使用 Java爬虫的图片爬取技术。

二、代码测试

1、写在前面

下面列举一个 Jsoup+HttpClient 爬虫的简单的例子,
注意 ①HttpClient请求、②IP代理、③模拟浏览器、④超时处理 的简单应用即可

先创建一个 SpringBoot 工程,当然创建一个Java工程/Maven工程也可以的

2、简单的需求

① 现在要爬出 CSDN 一个菜单栏的信息(当然,实际应用肯定不会像我这么无聊,应是爬虫一些url、文件、图片等资源点)
② CSDN 首页图、爬取的目标(红色边框的内容)


3、实现

①代码
package com.cun.test; import java.io.IOException; import
org.apache.http.HttpEntity;import org.apache.http.HttpHost; import
org.apache.http.client.ClientProtocolException;import
org.apache.http.client.config.RequestConfig;import
org.apache.http.client.methods.CloseableHttpResponse;import
org.apache.http.client.methods.HttpGet;import
org.apache.http.impl.client.CloseableHttpClient;import
org.apache.http.impl.client.HttpClients;import org.apache.http.util.EntityUtils;
import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import
org.jsoup.nodes.Element;import org.jsoup.select.Elements; /** * 1、使用 HttpClient
获取网页文档对象 * 2、使用 Jsoup 获取所需的信息 * 3、注意事项: * ① 设置连接超时:其实就是让它不再继续,做无意义的尝试 * ②
爬虫时被屏蔽了,就更换代理 IP * ③ 有些网站是设置只能浏览器才能访问的,这时候就要模拟浏览器 * ④ 有些网站的编码不一定是UTF-8,也有可能是GBK
* @author linhongcun * */ public class JsoupHttpClient { public static void main
(String[] args)throws ClientProtocolException, IOException { //
============================= 【HttpClient】 ====================================
// 创建httpclient实例 CloseableHttpClient httpclient = HttpClients.createDefault();
// 创建httpget实例 HttpGet httpget = new HttpGet("https://www.csdn.net/"); // 模拟浏览器
✔ httpget.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64;
rv:50.0) Gecko/20100101 Firefox/50.0"); // 使用代理 IP ✔ HttpHost proxy = new
HttpHost("118.114.77.47", 8080); RequestConfig config =
RequestConfig.custom().setProxy(proxy)//设置连接超时 ✔ .setConnectTimeout(10000) //
设置连接超时时间 10秒钟 .setSocketTimeout(10000) // 设置读取超时时间10秒钟 .build();
httpget.setConfig(config);// 执行get请求 CloseableHttpResponse response =
httpclient.execute(httpget); HttpEntity entity = response.getEntity();// 获取返回实体
String content = EntityUtils.toString(entity,"utf-8"); //
============================= 【Jsoup】 ====================================
//获取响应类型、内容 System.out.println("Status:"
+response.getStatusLine().getStatusCode()); System.out.println("Content-Type:"
+entity.getContentType().getValue());// 解析网页 得到文档对象 Document doc =
Jsoup.parse(content); Elements elements = doc.getElementsByTag("a"); //
获取tag是a的所有DOM元素,数组 for (int i = 3; i < 17; ++i) { Element element =
elements.get(i);// 获取第i个元素 String title = element.text(); // 返回元素的文本
System.out.println("<a>:" + title); } response.close(); // response关闭
httpclient.close();// httpClient关闭 } }
②效果



三、小结

1、Java爬虫使用技术主要是 HttpClient+Jsoup 组合,或者是使用 HtmlUnit
前者在爬取网站的速度一般比后者快,
因为不解析 JS、Ajax 等,这也是前者的缺点,也是后者有优点

2、爬虫方面,是必须使用缓存技术的,如使用 Ehcache/Redis(推荐),因为有一些 url 爬出过了就不要再爬取了。

3、动态代理 IP,百度一下,就有很多网站了,上面的 代理IP 就是去网上获取
比如这个 专为爬虫而生 <http://www.data5u.com/>

4、以后去别人的 网站上爬取信息,可以先爬取这类网站的 代理IP、端口号 到数据库中,如果作废了一个,就替换另外一个 IP、端口号。