本文主要向大家介绍了使用Java语言来编写一个易车网车型属性的爬虫,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。
这篇博主要介绍使用java来编写一个易车网车型属性的爬虫,汽车之家的网站最近反爬机制设置的特别严格,感兴趣的同学可以一起交流一下汽车之家网站的数据采集方案和技巧。
以下是爬虫的代码,需要源码的童鞋,欢迎与我联系。
package crawer;
import Dao.CarInforDao;
import exception.MsgException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public class CarInfor {
private Set cars=new HashSet();
CarInforDao carInforDao=CarInforDao.getCarInforDao();
CarGenerator carGenerator=new CarGenerator();
public CarInfor(){
}
public boolean getCarInfor(String car,int i){
boolean flag=false;
Map carInfor;
String URL="https://www.cheyisou.com/qiche/"+car+"/";
Document document=null;
try{
Document firstWeb= Jsoup.connect(URL).get();
if(firstWeb!=null){
Element element1=firstWeb.select("p[id=cMain]").first();
if(element1!=null){
Element element2=element1.selectFirst("p[class=c-container]");
if(element2!=null){
Element element3=element2.selectFirst("h3");
if(element3!=null){
Element a=element3.selectFirst("a");
if(a!=null){
String url=a.attr("href");
System.out.println(car+":"+url);
String exactluUrl=getExactlyURL(url);
if (!"https://car.bitauto.com".equals(exactluUrl)){
//获取car的详细配置信息
carInfor= getCarDetialInfor(exactluUrl);
if(carInfor!=null){
Car car1=carGenerator.assemble(carInfor);
car1.setName(car);
car1.setId(i);
try {
//向数据库中添加car信息
carInforDao.add(car1);
flag=true;
}catch (MsgException e){
e.printStackTrace();
}
}
}
}
}
}
}
}
}catch (IOException e){
System.out.println("获取"+car+"失败");
}
return flag;
}
/**
* 通过传入的url获取车型的详细配置信息
* @param url
* @return
*/
public Map getCarDetialInfor(String url){
Map result=new HashMap();
try{
Document doc=Jsoup.connect(url).get();
if(doc!=null){
Elements elements=doc.select("p[class=special-layout-18 layout-1]");
for(Element element:elements){
Elements trs=element.select("tr");
if(trs!=null){
for(Element tr:trs){
if(tr!=null){
Elements tds=tr.select("td");
 
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!