1、简述
网络爬虫就是模拟浏览器发送请求的过程:爬虫向服务器发送请求,服务器返回数据。
通俗地讲,就是把你手动打开窗口,输入数据等操作用程序代替。用程序替你获取你想要的信息,这就是网络爬虫。
2、应用
1. 搜索引擎
爬虫程序可以为搜索引擎系统爬取网络资源,用户可以通过搜索引擎搜索网络上一切所需要的资源。搜索引擎是一套非常庞大且精密的算法系统,搜索的准确性,高效性等都对搜索系统有很高的要求。
2. 数据挖掘
互联网项目通过爬取相关数据主要进行数据分析,获取价值数据。
eg:
1)股票分析——预测股市
2)社会学方面统计预测
3)App下载量分析
eg:
3、爬虫原理
1)爬虫目的
一般来讲对我们而言需要抓取的是某个网站或者某个应用的内容,提取有用的价值,进行数据分析。
2)爬虫框架设计
3)java爬虫框架
Nutch
Herieritrix
crawler4j
WebCollector
WebMegic
4、demo:使用爬虫框架HttpClient&Jsoup
1)HttpClient
HttpClient是apache组织下面的一个用于处理HTTP请求和相应的开源工具。它不是一个浏览器,也不处理客户端缓存等浏览器的功能。它只是一个类库!它在JDK的基本类库基础上做了更好的封装。
HttpClient抓取网页流程
- 创建HttpClient对象。
- 创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。
- 如果需要发送请求参数,可调用HttpGet、HttpPost共同的setParams(HttpParams params)方法来添加请求参数;对于HttpPost而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。
public class MyHttpClient {
/**
* 需求L使用HttpClient爬取传智播客官方网站数据
* @param args
* @throws IOException
* @throws
*/
public static void main(String[] args) throws Exception {
//创建HttpClient对象
HttpClient hClient = new DefaultHttpClient();
//设置响应时间,设置传输源码时间,设置代理服务器
hClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 10000)
.setParameter(CoreConnectionPNames.SO_TIMEOUT, 10000)
.setParameter(ConnRouteParams.DEFAULT_PROXY, new HttpHost("119.41.236.180",8010));
//爬虫URL大部分都是get请求,创建get请求对象
HttpGet hGet = new HttpGet("http://www.itcast.cn/");
//向传智播客官方网站发送请求,获取网页源码
HttpResponse response = hClient.execute(hGet);
//EntityUtils工具类把网页实体转换成字符串
String content = EntityUtils.toString(response.getEntity(),"utf-8");
System.out.println(content);
}
}
2)Jsoup
jsoup是一款java的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。通常在写爬虫程序时,httpClient结合jsoup共同使用即可完成完美的爬虫系统。
httpClient负责模拟浏览器发送请求,jsoup负责解析httpClient请求返回的HTML页面,解析获取需要的数据。
Jsoup获取网页流程
- 从一个URL,文件或字符串中解析HTML;
- 使用DOM或CSS选择器来查找、取出数据;
- 可操作HTML元素、属性、文本。
public class MyJsoup {
/**
* 需求:使用Jsoup解析网页源码
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
//使用jsoup向服务器发送请求
Document doc = Jsoup.connect("http://www.itcast.cn").get();
//Jsoup使用类似css,Jquery选择器方式获取元素节点
//Elements elements = doc.getElementsByTag("a");
//System.out.println(elements.text());
Elements elements = doc.select("li.w127 a");
//循环元素
for (Element element : elements) {
System.out.println(element.text()+" :"+element.attr("href"));
}
}
}
二者结合:
public class HttpClientVsJsoup {
/**
* 需求:使用httpClient和jsoup共同实现爬虫程序
* httpClient负责发送请求,获取网页源码
* Jsoup负责解析网页
* @param args
* @throws IOException
* @throws ClientProtocolException
*/
public static void main(String[] args) throws Exception {
//创建HttpClient对象
HttpClient hClient = new DefaultHttpClient();
//爬虫URL大部分都是get请求,创建get请求对象
HttpGet hGet = new HttpGet("http://www.itcast.cn/");
//向传智播客官方网站发送请求,获取网页源码
HttpResponse response = hClient.execute(hGet);
//EntityUtils工具类把网页实体转换成字符串
String content = EntityUtils.toString(response.getEntity(),"utf-8");
//使用Jsoup解析网页
Document doc = Jsoup.parse(content);
//使用元素选择器选择网页内容
Elements elements = doc.select("li.lione a");
System.out.println(elements.text());
}
}
其他
获取代理服务器IP
确定元素选择器
学习参考:链接:https://pan.baidu.com/s/1TeAIYOKTsiJMFK_CAi_2Dg 密码:58uh