基于WebCollector的java爬虫(一)爬取滨州学院官网新闻

代码地址:
https://code.csdn.net/u012995856/javacrawler/tree/master
效果:
这里写图片描述
新闻:
这里写图片描述

这里写图片描述
pdf:
这里写图片描述

这里还没有做处理分页。
使用WebCollector爬虫框架,iText7输出PDF
其实爬虫没什么神秘的,只是要自己分析网页,写正则表达式匹配url.然后让其他大牛写好的爬虫按照你的规则去分析抓取网页页面.
1.选取自己要抓取的页面
滨州学院新闻主页

http://www.bzu.edu.cn/s/1/t/84/p/12/i/194/list.htm

2.分析要抓取的页面的URL有什么规律
这是部分链接

http://www.bzu.edu.cn/s/1/t/84/bf/49/info48969.htm
http://www.bzu.edu.cn/s/1/t/84/bf/4e/info48974.htm
http://www.bzu.edu.cn/s/1/t/84/bd/ba/info48570.htm
...

差不多都是一个样式的,这里写一个正则表达式来匹配这种链接

http://www.bzu.edu.cn/\\w/\\d/\\w/\\d+/\\w+/\\w+/.*htm

这样这个正则表达式就能匹配新闻页面所有链接了
3.分析单个新闻页面,找到标题和内容
在单个新闻页面右键查看源代码
这里写图片描述
根据WebController的规则
就可以写

//页面标题
        String title = page.select("td[class=biaoti3]").text();
        //页面主题内容
        String content = page.select("td[class=content]").text();

4.代码
BZUNews.java

package com.huijiasoft.pangPython.test;

import java.io.FileNotFoundException;

import cn.edu.hfut.dmic.webcollector.model.CrawlDatums;
import cn.edu.hfut.dmic.webcollector.model.Page;
import cn.edu.hfut.dmic.webcollector.plugin.berkeley.BreadthCrawler;

/**
 * @author pangPython
 *  抓取滨州学院新闻导出pdf
 */
public class BZUNews extends BreadthCrawler{

    public BZUNews(String crawlPath, boolean autoParse) {
        super(crawlPath, autoParse);
        //设置开始爬取的页面
        this.addSeed("http://www.bzu.edu.cn/s/1/t/84/p/12/i/194/list.htm");
        //设置爬取规则 使用正则表达式
        this.addRegex("http://www.bzu.edu.cn/\\w/\\d/\\w/\\d+/\\w+/\\w+/.*htm");
        this.addRegex("http://www.bzu.edu.cn/\\w/\\d/\\w/\\d+/\\w/\\d+/\\w/\\d+/.*htm");
         /*不要爬取 jpg|png|gif*/
        this.addRegex("-.*\\.(jpg|png|gif).*");

    }

    @Override
    public void visit(Page page, CrawlDatums arg1) {
        //页面地址
        String url = page.getUrl();
        //页面标题
        String title = page.select("td[class=biaoti3]").text();
        //页面主题内容
        String content = page.select("td[class=content]").text();

        //输出到pdf中
        try {
            CreatePDF.createPdf(title, content);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws Exception {
        BZUNews bzunews = new BZUNews("bzunews", true);
        //多线程
        bzunews.setThreads(50);
        //设置每次迭代中爬取数量的上限
        bzunews.setTopN(5000);
        //开始爬取
        bzunews.start(4);
    }
}

CreatePDF.java

package com.huijiasoft.pangPython.test;

import java.io.FileNotFoundException;
import java.io.IOException;

import com.itextpdf.io.font.PdfEncodings;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;

/**
 * @author pangPython
 *  用于生成PDF
 *
 *  处理中文问题
 */
public class CreatePDF {

    public static void createPdf(String title,String content) throws FileNotFoundException{
//      String file_name = Math.random()+"1.pdf";
        String file_name = title+"1.pdf";
        PdfFont font =null;

         //处理中文问题  
        try {
//          font = PdfFontFactory.createFont("MSung-Light", "UniGB-UCS2-H", false);
             font = PdfFontFactory.createFont("C:\\Windows\\Fonts\\STKAITI.TTF", PdfEncodings.IDENTITY_H, true);
        } catch (IOException e) {

            e.printStackTrace();
        }

    PdfWriter writer = new PdfWriter(file_name);

        PdfDocument pdf = new PdfDocument(writer);

        Document document = new Document(pdf);
        Paragraph p1 = new Paragraph(title);
        Paragraph p2 = new Paragraph(content);

        p1.setFont(font);
        p2.setFont(font);

        document.add(p1);
        document.add(p2);

        document.close();


    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值