java 抓取拍拍贷网站数据

原创 2015年07月06日 16:41:46
 
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
import com.gargoylesoftware.htmlunit.html.HtmlDivision;
import com.gargoylesoftware.htmlunit.html.HtmlElement;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

/**
 * 抓取拍拍贷网站(http://invest.ppdai.com/loan/list_riskhigh?monthgroup=&rate=0&didibid=)数据
 * @author yesf
 *
 */
public class Main {
	private final static String[] headerTitles = new String[]{"用户", "借入信用", "借出信用", "性别年龄", "目前身份", "次数", "借款金额", "年利率", "期限", "还款方式", "投标人数", "状态"};
	private final static String FILE_PATH = "./正常数据_高风险收益区.csv";
	private final static WebClient CLIENT = new WebClient(BrowserVersion.CHROME);
	
    /**    
       
     * main(这里用一句话描述这个方法的作用)    
     * @param   name    
     * @param  @return    设定文件    
     * @return String    DOM对象    
     * @Exception 异常对象     
     */
    public static void main(String[] args) {
        CLIENT.getOptions().setJavaScriptEnabled(false);
        CLIENT.getOptions().setCssEnabled(false);
        HtmlPage page = null; 
        try {
        	// http://invest.ppdai.com/loan/list_safe_s0_p1?Rate=0
        	// http://invest.ppdai.com/loan/list_riskmiddle?monthgroup=&rate=0&didibid=
            page = CLIENT.getPage("http://invest.ppdai.com/loan/list_riskhigh?monthgroup=&rate=0&didibid=");
            for(;;) {
                parseContent(page);
                HtmlAnchor anchor = (HtmlAnchor)page.getByXPath("//a[@class='nextpage']").get(0);
                if(anchor.getAttribute("href").equals("javascript:void(0)")) {
                    break; 
                }
//                page = anchor.click(); 
                page = CLIENT.getPage("http://invest.ppdai.com" + anchor.getHrefAttribute());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        CLIENT.close();
    }

    private static void parseContent(HtmlPage page) throws IOException {
        List<HtmlElement> elements = (List<HtmlElement>)page.getByXPath("//p[@class='userInfo clearfix']");
        for(HtmlElement element : elements) {
        	HtmlAnchor anchor = (HtmlAnchor) element.getFirstElementChild();
        	String userName = anchor.asText();
//        	HtmlPage userPage = anchor.click();
        	HtmlPage userPage = CLIENT.getPage(anchor.getHrefAttribute());
        	
        	String honorLi = ((HtmlElement)(userPage.getByXPath("//li[@class='honor_li']").get(0))).asText().replaceAll("\r", "").replaceAll("\n", "");
            String userLi = ((HtmlElement)(userPage.getByXPath("//li[@class='user_li']").get(0))).asText().replaceAll("\r", "").replaceAll("\n", "");
           
            List<HtmlDivision> divList = (List<HtmlDivision>) userPage.getByXPath("//div[@class='borrowlist_tit']");
            List<HtmlDivision> divList1 = (List<HtmlDivision>) userPage.getByXPath("//div[@class='borrow_list']");
            for(int i=0; i<divList.size(); i++) {
            	HtmlDivision div = divList.get(i);
            	HtmlDivision div1 = divList1.get(i);
            	String text = div1.asText().replace(",", "").replaceAll("\r", "").replaceAll("\n", "");
            	int start = text.indexOf("状态:");
            	int end = text.indexOf("借入信用:");
            	String status = "";
            	if (start != -1 && end != -1) {
            		status = text.substring(start, end);
            	}
//            	System.out.println(text);
            	
//            	 HtmlPage userDetailPage = ((HtmlAnchor)(div.getFirstElementChild())).click();
            	 HtmlPage userDetailPage = CLIENT.getPage("http://www.ppdai.com" + ((HtmlAnchor)div.getFirstElementChild()).getHrefAttribute());
                 String successCnt = ((HtmlElement)(userDetailPage.getByXPath("//span[@class='bidinfo']").get(0))).asText();
                 String detail = ((HtmlDivision)userDetailPage.getByXPath("//div[@class='newLendDetailMoneyLeft']").get(0)).asText().replaceAll(",", "");
                 String payWay = ((HtmlDivision)userDetailPage.getByXPath("//div[@class='item w260']").get(0)).asText();
                 String biaoCnt = ((HtmlDivision)userDetailPage.getByXPath("//div[@class='item w164']").get(0)).asText();
                 
//                 String moneyAll = userDetailPage.getElementById("listRestMoney").asText().replace(",", "");
                 
                 String sourceData = "用户: " + userName + " " + honorLi + " 性别年龄: " + userLi + " 次数: " + successCnt + " " + detail + " " + payWay + biaoCnt + status;//+ " 金额: " + moneyAll;
//                 System.out.println(sourceData);
                 String data = formatData(sourceData);
//                 System.out.println(data);
                 writeToCsv(FILE_PATH, data);
            }
        }
    }
    
    private static String formatData(String data) {
    	data = data.replaceAll(":", ",").replaceAll(":", ",");
    	for(String headerTitle : headerTitles) {
    		data = data.replace(headerTitle, "");
    	}
    	return data;
    }
    
    private static void writeToCsv(String filePath, String data) {
    	File file = new File(filePath);
    	BufferedWriter writer = null;
    	boolean first = false;
    	try {
	    	if(!file.exists()) {
	    		file.getParentFile().mkdirs();
	    		file.createNewFile();
	    		first = true;
	    	}
	    	writer = new BufferedWriter(new FileWriter(file, true));
	    	if(first) {
	    		StringBuilder sb = new StringBuilder("");
	    		for(String header : headerTitles) {
	    			sb.append(",").append(header);
	    		}
	    		writer.write(sb + "\r\n");
	    	}
	    	writer.write(data + "\r\n");
    	} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if(writer != null) {
				try {
					writer.close();
				} catch (IOException e) {
					e.printStackTrace();
				}				
			}
		}
    }

}

生成的目标文件如下:


功能实现核心技术采用htmlunit开源框架,纯java实现浏览器内核引擎,模拟用户操作,自动完成鼠标点击,表单提交,下载文件等。。。朋友们自由发挥哈,发挥你们的想象

版权声明:本文为博主原创文章,未经博主允许不得转载。

拍拍贷数据库

  • 2012年12月29日 14:56
  • 1.7MB
  • 下载

java 抓取拍拍贷网站数据

import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOExce...
  • yesenfei
  • yesenfei
  • 2015年07月06日 16:41
  • 4080

现金贷大数据报告

  • 2018年01月09日 16:19
  • 1.46MB
  • 下载

利用python爬取人人贷网的数据

转自 http://mp.weixin.qq.com/s?__biz=MzA3MDg0MjgxNQ==&mid=2652390789&idx=1&sn=95bd2f843d7fc2d66ca4082f...
  • hqr20627
  • hqr20627
  • 2017年02月02日 21:59
  • 831

Kesci“魔镜杯”风控算法大赛铜奖解决方案

决赛答辩第4,获得铜奖 代码地址:https://github.com/wepe/PPD_RiskControlCompetition
  • Bryan__
  • Bryan__
  • 2016年04月19日 15:09
  • 14651

解码大数据征信

解码大数据征信 199IT2016-05-17 22:45:24阅读(3610)评论(0) 声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐...
  • starzhou
  • starzhou
  • 2017年05月20日 21:43
  • 855

p2p

编者按:2013年以来,互联网金融呼啸而至,对中国经济社会产生了翻天覆地的影响。可以预见,未来中国经济金融发展将与互联网金融息息相关,电商、P2P、在线金融等热词将成为全社会持续重点关注的对象。201...
  • u010395804
  • u010395804
  • 2015年03月20日 15:23
  • 787

【开车了】9个大数据竞赛思路分享

本次分享主要从笔者过去一年和今年上半年的参赛经验来做讲解 后续将会针对目前天池开放的几个新人挑战赛推出手把手教你进首页系列文章 包括赛题详细思路讲解,demo代码讲解。 开始今天的分享是将之前的比...
  • Bryan__
  • Bryan__
  • 2016年06月19日 20:27
  • 6582

『Scrapy』登录人人贷并抓取借贷人信息中遇到的坑

1、在故意输错密码的时候,不能只是在正确密码的前提下减少几个密码,而是应该增加几个不是密码的字符 2、...
  • Sbtgmz
  • Sbtgmz
  • 2016年10月16日 00:56
  • 1448

[记录]Java网络爬虫基础和抓取网站数据的两个小实例

前段时间在学习爬虫,并从网络抓取了一些简单的数据,记录一下。 抓取分成下面3个部分: 1、网络请求 2、解析抓取下来的页面,并且处理乱码或者解压代码的问题 3、拿到指定的数据、资源 完整代码如下: /...
  • a501936721
  • a501936721
  • 2015年10月21日 16:08
  • 3451
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java 抓取拍拍贷网站数据
举报原因:
原因补充:

(最多只允许输入30个字)