java爬虫
其他:URLConnection
包含的jar包:
httpclient-4.0.1.jar
httpcore-4.0.1.jar(处理核心的http协议)
httpmime-4.0.1.jar
commons-codec(处理与编码有关的问题的项目)
commons-logging-1.1.3.jar(处理与日志记录有关的问题的项目)
commons-io-1.4.jar(方便处理与io相关的需求)
HttpClient相关jar包下载地址:http://hc.apache.org/downloads.cgi
HttpClient使用方法如下:
1. 创建HttpClient对象。
2. 创建请求方法的实例,并指定请求URL。如果发送GET请求,创建HttpGet对象,如果发送POST请求,创建HttpPost对象。
3.发送请求参数,调用HttpGet、HttpPost共同setParam(HttpParams Params)方法添加请求参数。HttpPost对象也可调用setEntity(HttpEntity entity)
4. 调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse。
5. 调用HttpResponse相关方法获取相应内容。
package myCrawler;
import java.io.IOException;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.params.ConnRouteParams;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.util.EntityUtils;
public class MyHttpClient {
/***
* 需求:使用HttpClient爬取网站数据
* @param args
* @throws IOException
* @throws ClientProtocolException
*/
public static void main(String[] args) throws ClientProtocolException, IOException{
//创建HttpClient对象
HttpClient hClient=new DefaultHttpClient();
//设置响应的时间,设置传输源码的时间
//设置代理服务器,防止被网站识别IP,加入黑名单
// hClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 10000)//连接超时
// .setParameter(CoreConnectionPNames.SO_TIMEOUT, 10000)//传输超时
// .setParameter(ConnRouteParams.DEFAULT_PROXY, new HttpHost("代理服务器",端口号));
//get请求,创建get请求对象
HttpGet hget=new HttpGet("https://www.2345.com/");
//向网站发送请求,获取HTML源码
HttpResponse response=hClient.execute(hget);
//使用response返回的结果,使用工具类将网页实体转换成字符串,需指定网页编码
String content=EntityUtils.toString(response.getEntity(),"gb2312");
//输出
System.out.println(content);
}
}
Jsoup
一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。通过Jsoup的jar包中的方法将Html解析成Document。得到的数据封装成自己的实体类。将实体中的数据在页面加载出来。
package myCrawler;
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class MyJsoup {
/*
* 使用Jsoup解析网页源码
*/
public static void main(String[] args) throws IOException {
//使用Jsoup向服务器发送请求,文档对象
Document doc = Jsoup.connect("https://www.2345.com/").get();
//使用Jsoup类似于css、jquery的选择器的方式获取元素节点
// Elements elements=doc.getElementsByTag("a");//使用代码程序的方式解析,获取纯文本
// System.out.println(element.text());
//Ctrt+F
Elements elements=doc.select("ul.cont-list a");
//循环元素
for(Element element:elements){
//attr("")方法获取便签属性
// Elements elements1 = element.children();
// String targetUrl = elements1.get(0).getElementsByTag("a").attr("href");
// //获取图片
// String img = elements1.get(0).getElementsByTag("img").first().attr("data-src");
// if (img.contains(".jpg")) {
// int a = img.indexOf(".jpg");
// img = img.substring(0, a + 4);
// }
System.out.println(element.text()+":"+element.attr("href"));
}
}
}
HttpClient&Jsoup
HttpClient模拟浏览器发出请求,Jsoup解析HttpClient请求返回的HTML网页获取所要数据。
httpClient不仅可以发送get请求,而且可以发送post请求,提交表单,传送
文件,还比如jsoup最强大的地方在于它支持仿jquery的选择器
package myCrawler;
import java.io.IOException;
import org.apache.http.HttpResponse;
import org.apache.http.ParseException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
public class HttpClientNJsoup {
/*
* 结合HttpClient和Jsoup实现爬虫程序
*/
public static void main(String[] args) throws ParseException, IOException {
//创建HttpClient对象
HttpClient hClient=new DefaultHttpClient();
//get请求,创建get请求对象
HttpGet hget=new HttpGet("https://www.2345.com/");
//向网站发送请求,获取HTML源码
HttpResponse response=hClient.execute(hget);
//使用response返回的结果,使用工具类将网页实体转换成字符串,需指定网页编码
String content=EntityUtils.toString(response.getEntity(),"gb2312");
//使用Jsoup解析
Document doc =Jsoup.parse(content);
//使用元素选择器选择网页内容,返回一个元素
Elements elements=doc.select("ul.cont-list a");
System.out.println(elements.text());
}
}
感想:第一次在网上写的笔记,写得不是很好。可能对于别人来说是很简单的一段程序,自己慢慢的敲出来。可能未来用不到,但希望能记录点什么。-----xxj