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

本文为原创博客,仅供技术学习使用。未经允许,禁止将其复制下来上传到百度文库等平台。如有转载请注明本文博客的地址(链接)
源码获取请联系: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();
    }
}

程序运行结果

这里写图片描述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值