抓取网络json数据并存入mongodb(2)
2015-02-21 11:40
274 查看
这是 抓取网络json数据并存入mongodb(1) 的续篇。主要是爬虫实现部分。年前就已经完成了的,现在整理一下。
通过Firebug观察网络请求,分析出请求地址后,可以直接构造url参数获取数据的json。
webmagic爬虫框架灵活好用。这次爬取比较暴力,直接轮询,只把返回为200的页面进行处理(框架默认)并分类存储。
自己上代码,详见注释说明。
通过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); } }
相关文章推荐
- 抓取网络json数据并存入mongodb(1)
- Android网络请求与JSON解析和数据抓取小实例
- 网络爬虫之php抓取json,xml,js,html示例分析及数据解析
- 运用python抓取博客园首页的全部数据,并且定时持续抓取新发布的内容存入mongodb中
- 使用GET和POST从网络上抓取json数据串
- 运用python抓取博客园首页的所有数据,而且定时持续抓取新公布的内容存入mongodb中
- Android之从网络中获取数据并返回客户端的两种方式:XML格式返回与Json格式返回
- Android网络开发中如何使用JSON进行网络通信---Android JSON数据通讯方法解析
- Json 网络上传数据和读取数据(简)
- Android 使用JSON进行网络数据交换
- android使用JSON进行网络数据交换(服务端、客户端)的实现
- getJSON 抓取servlet传递的数据,在IE下不及时更新数据
- Android利用Json来进行网络数据传输
- android使用JSON进行网络数据交换(服务端、客户端)的实现
- HttpURLConnection模拟浏览器+网络数据抓取
- HttpURLConnection模拟浏览器+网络数据抓取
- 抓取网络数据
- 抓取链接里数据并存入本地
- android 使用JSON进行网络数据交换
- Android网络开发中如何使用JSON进行网络通信---Android JSON数据通讯方法解析