多线程新浪新闻搜索网络爬虫-基于关键字

来源:互联网 发布:中国外汇储备结构知乎 编辑:程序博客网 时间:2024/06/05 11:25

本文为原创博客,仅供技术学习使用。未经允许,禁止将其复制下来上传到百度文库等平台。如有转载请注明本文博客的地址(链接)
源码获取请联系:1563178220@qq.com

简介

互联网有海量的新闻,如何基于关键字检索相关新闻,并将新闻内容存储到数据库呢,以新浪新闻为例,如下图所示,输入关键字爬取历史新闻,可以看到历史新闻的数量有很多,因此采用单线程的方式,无法满足需求,可采用多线程的方式采集数据。

这里写图片描述

这里写图片描述

程序框架

这里写图片描述

主程序

package main;/** * @author:合肥工业大学 管理学院 钱洋 * @email:1563178220@qq.com * @  *//* * 多线层爬取新闻id,标题,url * */import java.io.IOException;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import org.apache.http.ParseException;import org.apache.http.client.HttpClient;import org.apache.http.impl.client.DefaultHttpClient;import db.MYSQLControl;import model.NewInfo;import utils.URLFecter;import utils.Utils;public class FirstNewsThread extends Thread{    String Starturl = "";    //构造函数,初始化使用    public  FirstNewsThread (String Starturl){        this.Starturl = Starturl;    }    public void run(){        //针对每个url开始爬取        HttpClient client = new DefaultHttpClient();        System.out.println(Starturl);        List<NewInfo> newinfo=new ArrayList<NewInfo>();        try {            newinfo=URLFecter.htmlFirstGet(client, Starturl);        } catch (ParseException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        } catch (SQLException e) {            e.printStackTrace();        } catch (InterruptedException e) {            e.printStackTrace();        }        for (NewInfo info:newinfo) {            System.out.println(info.getNewsurl()+"\t"+info.getNewsid()+"\t"+info.getNewstitle());        }        MYSQLControl.insertnewsurl_info(newinfo);    }    public static void main(String[] args) throws SQLException{        //提供你的关键字        String keyword="金融";        //转化成网页字符        String keywordtransform=Utils.toUrlString(keyword,"gbk");        //创建固定大小的线程池        ExecutorService exec = Executors.newFixedThreadPool(5);        for (int i = 1; i < 1000; i++) {            String starturl="http://search.sina.com.cn/?q="+keywordtransform+"&range=all&c=news&sort=time&col=&source=&from=&country=&size=&time=&a=&"                    + "page="+i+"&pf=2131425467&ps=2134309112&dpc=1";            //执行线程            exec.execute(new FirstNewsThread(starturl));        }        //线程关闭        exec.shutdown();    }}

程序运行结果

这里写图片描述

数据库结果展示:
这里写图片描述

原创粉丝点击