2024-04-08 00:34:25 | 我爱编程网
用HTTPclient或者htmlunit工具包,他们都可以做爬虫获取网页的工具。比如htmlunit,楼主可以这样获取网页源码:
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.html.HtmlDivision;
import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
import com.gargoylesoftware.htmlunit.*;
import com.gargoylesoftware.htmlunit.WebClientOptions;
import com.gargoylesoftware.htmlunit.html.HtmlInput;
import com.gargoylesoftware.htmlunit.html.HtmlBody;
import java.util.List;我爱编程网
public class helloHtmlUnit{
public static void main(String[] args) throws Exception{
String str;
//创建一个webclient
WebClient webClient = new WebClient();
//htmlunit 对css和javascript的支持不好,所以请关闭之
webClient.getOptions().setJavaScriptEnabled(false);
webClient.getOptions().setCssEnabled(false);
//获取页面
HtmlPage page = webClient.getPage("");
//获取页面的TITLE
str = page.getTitleText();
System.out.println(str);
//获取页面的XML代码
str = page.asXml();
System.out.println(str);
//获取页面的文本
str = page.asText();
System.out.println(str);
//关闭webclient
webClient.closeAllWindows();
}
}
如果用HTTPclient,楼主可以百度它的教程,有本书叫做《自己动手写网络爬虫》,里面是以java语言为基础讲的,作为一个爬虫入门者可以去看看
1、思路:
明确需要爬取的信息
分析网页结构
分析爬取流程
优化
2、明确需要爬取的信息
职位名称
工资
职位描述
公司名称
公司主页
详情网页
分析网页结构
3、目标网站-拉勾网
网站使用json作为交互数据,分析json数据,需要的json关键数据
查看需要的信息所在的位置,使用Jsoup来解析网页
4、分析爬取流程
1.获取所有的positionId生成详情页,存放在一个存放网址列表中List
2.获取每个详情页并解析为Job类,得到一个存放Job类的列表List
3.把List
Java操作Excel需要用到jxl
5、关键代码实现
public List
String pre_url="
";
String end_url=".html";
String url;
if (gj.equals("")){
url="
;city=
"+city+"&needAddtionalResult=false&first=false&pn="+pn+"&kd="+kd;
}else {
url="
positionAjax.json?gj="+gj+"&px=default&city="+city+"&needAddtionalResult=false&first=false&pn="+pn+"&kd="+kd;
}
String rs=getJson(url);
System.out.println(rs);
int total= JsonPath.read(rs,"$.content.positionResult.totalCount");//获取总数
int pagesize=total/15;
if (pagesize>=30){
pagesize=30;
}
System.out.println(total);
// System.out.println(rs);
List
for (int j=1;j<=pagesize;j++){ //获取所有的网页id
pn++; //更新页数
url="
positionAjax.json?gj="+gj+"&px=default&city="+city+"&needAddtionalResult=false&first=false&pn="+pn+"&kd="+kd;
String rs2=getJson(url);
List
posid.addAll(posid2); //添加解析的id到第一个list
}
List
//生成网页列表
for (int id:posid){
String url3=pre_url+id+end_url;
joburls.add(url3);
}
return joburls;
}
public Job getJob(String url){ //获取工作信息
Job job=new Job();
Document document= null;
document = Jsoup.parse(getJson(url));
job.setJobname(document.select(".name").text());
job.setSalary(document.select(".salary").text());
String joball=HtmlTool.tag(document.select(".job_bt").select("div").html());//清除html标签
job.setJobdesc(joball);//职位描述包含要求
job.setCompany(document.select(".b2").attr("alt"));
Elements elements=document.select(".c_feature");
//System.out.println(document.select(".name").text());
job.setCompanysite(elements.select("a").attr("href")); //获取公司主页
job.setJobdsite(url);
return job;
}
void insertExcel(List
int row=1;
Workbook wb = Workbook.getWorkbook(new File(JobCondition.filename));
WritableWorkbook book = Workbook.createWorkbook(new File(JobCondition.filename), wb);
WritableSheet sheet=book.getSheet(0);
for (int i=0;i
sheet.addCell(new Label(0,row,jobList.get(i).getJobname()));
sheet.addCell(new Label(1,row,jobList.get(i).getSalary()));
sheet.addCell(new Label(2,row,jobList.get(i).getJobdesc()));
sheet.addCell(new Label(3,row,jobList.get(i).getCompany()));
sheet.addCell(new Label(4,row,jobList.get(i).getCompanysite()));
sheet.addCell(new Label(5,row,jobList.get(i).getJobdsite()));
row++;
}
book.write();
book.close();
}
我爱编程网(https://www.52biancheng.com)小编还为大家带来用java编写 网络爬虫(又称网络蜘蛛)程序,即一个网络搜索引擎。寻求解决办法的相关内容。
方法很多,我说一种方法吧。
你可以用HttpClient来获取网页的源码,然后在源码中分别查找每一个链接。
下面这一段代码就可以获取网页的的源码 strURL为网页链接
HttpClient client = new HttpClient();
client.getHttpConnectionManager().getParams().setConnectionTimeout(500);
client.getHttpConnectionManager().getParams().setSoTimeout(500);
method = new PostMethod(strURL);
client.executeMethod(method);
webStatus += method.getStatusLine().getStatusCode()+",";
if(! "200".equals(method.getStatusLine().getStatusCode()+"")){
if(! "".equals(method.getStatusLine().getStatusCode()+""))
return "";
}
InputStream is = method.getResponseBodyAsStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is, currEncoding));
StringBuffer stringBuffer = new StringBuffer();
String str = "";
while ((str = br.readLine()) != null) {
stringBuffer.append(str);
}
content = stringBuffer.toString();
我不知道你还有什么具体的问题,有的继续追问。
2025-02-01 20:24:39
2024-01-05 14:11:24
2025-02-10 15:19:48
2025-01-28 17:58:32
2024-11-22 05:08:01
2024-09-10 08:50:00