核心思想httpclient爬取数据,jsoup解析数据;需要导入这两个的依赖或者jar包。
一。HttpClient简介*
HttpClient是Apache Jakarta Common下的子项目,可以用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本。它的主要功能有:
(1) 实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)
(2) 支持自动转向
(3) 支持 HTTPS 协议
(4) 支持代理服务器等
二。Jsoup简介
jsoup是一款Java的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。它的主要功能有:
(1) 从一个URL,文件或字符串中解析HTML;
(2) 使用DOM或CSS选择器来查找、取出数据;
(3) 可操作HTML元素、属性、文本;
三。添加依赖或jar包
依赖
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.8.3</version>
</dependency>
jar包链接
http://hc.apache.org/downloads.cgi
http://jsoup.org/packages/jsoup-1.8.1.jar
四。爬取的页面
五。代码
package cn.itcast.crawler.test;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
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;
public class HttpGetTest {
public static void main(String[] args) {
//创建对象
HttpGetTest httpGetTest = new HttpGetTest();
//对象调用爬取页面信息的方法
String contant=httpGetTest.gethtml("https://jobs.51job.com/nanjing/120031745.html?s=01&t=0");
//使用对象解析爬取的页面信息
httpGetTest.parsehtml(contant);
}
public String gethtml(String url){
String urlMessage=null;
//创建HttpClient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
//创建HttpGet对象,设置url访问地址
HttpPost httpPost= new HttpPost(url);
//创建响应
CloseableHttpResponse response = null;
try{
//使用HttpClient发起请求,获取response
response=httpClient.execute(httpPost);
//解析响应
if (response.getStatusLine().getStatusCode()==200){
urlMessage = EntityUtils.toString(response.getEntity(),"GBK");
}
}catch (Exception e){
e.printStackTrace();
}finally {
try{
response.close();
}catch (Exception e){
e.printStackTrace();
}
try{
httpClient.close();
}catch (Exception e){
e.printStackTrace();
}
}
return urlMessage;
}
public void parsehtml(String html ){
//解析html获取Document
Document doc = Jsoup.parse(html);
//获取标题内容
String title=doc.select("body > div.tCompanyPage > div.tCompany_center.clearfix > div.tHeader.tHjob > div > div.cn > h1").text();
System.out.println("标题:"+title);
//获取公司名称
String companyName=doc.select("body > div.tCompanyPage > div.tCompany_center.clearfix > div.tHeader.tHjob > div > div.cn > p.cname > a.catn").text();
System.out.println("公司名称:"+companyName);
//获取职位信息
String position=doc.select("body > div.tCompanyPage > div.tCompany_center.clearfix > div.tCompany_main > div:nth-child(1) > h2 > span").text();
String positionMessage=doc.select("body > div.tCompanyPage > div.tCompany_center.clearfix > div.tCompany_main > div:nth-child(1) > div").text();
System.out.println(position+":"+positionMessage);
//获取联系方式
String contact=doc.select("body > div.tCompanyPage > div.tCompany_center.clearfix > div.tCompany_main > div:nth-child(2) > h2 > span").text();
String contant=doc.select("body > div.tCompanyPage > div.tCompany_center.clearfix > div.tCompany_main > div:nth-child(2) > div > p").text();
System.out.println(contact+":"+contant);
//公司信息
String company = doc.select("body > div.tCompanyPage > div.tCompany_center.clearfix > div.tCompany_main > div:nth-child(3) > h2 > span").text();
String companyMessage=doc.select("body > div.tCompanyPage > div.tCompany_center.clearfix > div.tCompany_main > div:nth-child(3) > div").text();
System.out.println(company+":"+companyMessage);
}
}
六。运行结果
补充:
页面按F12
然后移到你想获取信息的位置
右边会出现对应信息的标签处
然后右击对应的标签
最后粘贴到选择器中