您的位置:首页 > 理论基础 > 计算机网络

抓取网络json数据并存入mongodb(2)

2015-02-21 11:40 274 查看
这是 抓取网络json数据并存入mongodb(1) 的续篇。主要是爬虫实现部分。年前就已经完成了的,现在整理一下。

通过Firebug观察网络请求,分析出请求地址后,可以直接构造url参数获取数据的json。

webmagic爬虫框架灵活好用。这次爬取比较暴力,直接轮询,只把返回为200的页面进行处理(框架默认)并分类存储。

自己上代码,详见注释说明。

import com.mongodb.*;
import com.mongodb.util.JSON;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.processor.PageProcessor;

import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;

/**
* Created by yiang on 2015/2/16.
*/
public class ShixinAPICrawler2 {
// TODO: 设置爬取范围
private static int beginId=0+1;
private static int endid=1209500;
private final static int inc=100000;
// 并发线程数,建议不要过高
private int threadNum=64;
// 线程休眠时间,单位毫秒
private int threadSleepTime=5000;

private static Log logger= LogFactory.getLog("shixinLog");

public void crawl(List urls) throws UnknownHostException {
final Site site = Site.me().setSleepTime(this.threadSleepTime).setTimeOut(5000).setRetryTimes(3)
.setCycleRetryTimes(1).setDomain("shixin.court.gov.cn")
.setUserAgent("Mozilla/5.0 (compatible; " +
"Baiduspider/2.0; +http://www.baidu.com/search/spider.html)");

Spider spider = Spider.create(new PageProcessor() {
// 驱动连接mongodb数据库
Mongo mongo = new Mongo();
DB db = mongo.getDB("shixinDB");
DBCollection qUnit=db.getCollection("shixinUnit");
DBCollection qPerson=db.getCollection("shixinPerson");
DBObject query;
@Override
public void process(Page page) {
logger.info(page.getRawText());
query = (BasicDBObject) JSON.parse(page.getRawText());

// TODO: 缺少判断数据重复的逻辑
if(page.getRawText().contains("\"partyTypeName\":\"580\""))
{
// 自然人信息分至shixinPerson集合 partyTypeName=580
qPerson.save(query);
}else
{
// 法人或其他组织信息分至shixinUnit集合 partyTypeName=581
qUnit.save(query);
}
}
@Override
public Site getSite() {
return site;
}
});
spider.startUrls(urls).thread(this.threadNum).run();
}
public static void main(String[] args) throws UnknownHostException {
Long startTime=System.currentTimeMillis();

// 爬虫种子urls集合
List<String> urls=new ArrayList<String>();

// 按照规则生成种子url
for (int id=beginId;id<=endid;id++){
urls.add("http://shixin.court.gov.cn/detail?id="+id);
}
// 爬取
new ShixinAPICrawler2().crawl(urls);

Long endTime=System.currentTimeMillis();
logger.info((endTime-startTime)/1000.0);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: