网络爬虫实验手册簿Word格式.docx
《网络爬虫实验手册簿Word格式.docx》由会员分享,可在线阅读,更多相关《网络爬虫实验手册簿Word格式.docx(12页珍藏版)》请在冰豆网上搜索。
3.1建立应用程序项目
打开eclipse,创建本次实验项目htmlCrawler(【File】->
【New】->
【JavaProject】
)如图1所示。
图1创建工程
3.2在Eclipse项目中配置使用WebCollector爬虫
1选中htmlCrawler右键,选中【New】->
【Folder】,输入文件名称“lib”,如下图2所示。
图2创建文件夹
2解压缩webcollector-2.26-bin.zip,拷贝所有的Jar包,放到lib目录中,如图3所示。
图3目录结构图
3将文件夹lib中的所有jar包添加到buildpath中,如图4、图5、图6所示。
图4
图5
图6
依次选中jar包,导入到工程中。
4如果想看WebCollector的源码,可以为Jar包关联源码(可选),如图6、图7所示。
图7
3.3现在可以编写WebCollector爬虫的代码了
新建一个类Crawler.java,继承自BreadthCrawler。
重写visit方法,来实现满足自己需求的爬虫即可。
如图8、图9所示。
图8
图9
3.4抓取河北师大软件学院网站首页的源代码
packagehtmlCrawler;
importjava.io.IOException;
importcn.edu.hfut.dmic.webcollector.model.CrawlDatums;
importcn.edu.hfut.dmic.webcollector.model.Page;
importcn.edu.hfut.dmic.webcollector.plugin.berkeley.BreadthCrawler;
importcn.edu.hfut.dmic.webcollector.util.FileUtils;
publicclassCrawlerextendsBreadthCrawler{
publicCrawler(StringcrawlPath,booleanautoParse){
super(crawlPath,autoParse);
//TODOAuto-generatedconstructorstub
}
@Override
publicvoidvisit(Pagepage,CrawlDatumsnext){
//TODOAuto-generatedmethodstub
try{
System.out.println("
正在提取:
"
+page.getUrl());
//将爬取的内容写到test.html页
FileUtils.writeFileWithParent("
downloads/test.html"
page.getContent());
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
publicstaticvoidmain(String[]args){
//创建爬虫对象
Crawlercrawler=newCrawler("
html_crawler"
true);
crawler.addSeed("
//启动爬虫
crawler.start
(1);
}catch(Exceptione){
}
控制台输出结果:
2016-02-2514:
23:
06INFOcn.edu.hfut.dmic.webcollector.crawler.Crawler-startdepth1
06INFOcn.edu.hfut.dmic.webcollector.fetcher.Fetcher-opengenerator:
cn.edu.hfut.dmic.webcollector.plugin.berkeley.BerkeleyGenerator
06INFOcn.edu.hfut.dmic.webcollector.fetcher.Fetcher-initsegmentWriter:
cn.edu.hfut.dmic.webcollector.plugin.berkeley.BerkeleyDBManager
07INFOcn.edu.hfut.dmic.webcollector.fetcher.Fetcher--activeThreads=1,spinWaiting=0,fetchQueue.size=0
07INFOcn.edu.hfut.dmic.webcollector.fetcher.Fetcher-fetchURL:
08INFOcn.edu.hfut.dmic.webcollector.fetcher.Fetcher--activeThreads=0,spinWaiting=0,fetchQueue.size=0
08INFOcn.edu.hfut.dmic.webcollector.fetcher.Fetcher-clearallactiveThread
08INFOcn.edu.hfut.dmic.webcollector.fetcher.Fetcher-closegenerator:
08INFOcn.edu.hfut.dmic.webcollector.fetcher.Fetcher-closesegmentwriter:
08INFOcn.edu.hfut.dmic.webcollector.plugin.berkeley.BerkeleyDBManager-startmerge
08INFOcn.edu.hfut.dmic.webcollector.plugin.berkeley.BerkeleyDBManager-mergefetchdatabase
08INFOcn.edu.hfut.dmic.webcollector.plugin.berkeley.BerkeleyDBManager-mergelinkdatabase
08INFOcn.edu.hfut.dmic.webcollector.plugin.berkeley.BerkeleyDBManager-endmerge
08INFOcn.edu.hfut.dmic.webcollector.crawler.Crawler-depth1finish:
TOTALurls:
1
TOTALtime:
2seconds
爬取结果如图10所示。
图10
4扩展内容
4.1在本实验的基础上,进行相关的设置:
(1)爬取的深度;
设置开启的线程数;
(2)设置爬取url的上限;
(3)通过正则表达式设置爬取哪些网页,不爬取哪些网页等(eg./*不要爬取jpg|png|gif*/,代码:
crawler.addRegex("
-.*\\.(jpg|png|gif).*"
);
)。
(4)实现代码由学生自己完成
4.2实现自己的网络爬虫,抓取“新浪新闻”(
(1)需要抓取信息包括:
网址,标题,时间,网页内容等。
(2)将抓取的数据写到文本文件或excel表中。
(3)抓取代码由学生自己完成。
提示:
将数据写到excel表中,需要导入poi-3.14-beta1-20151223.jar包,部分代码如下:
//创建一个EXCEL
Workbookwb=newHSSFWorkbook();
…..
//创建一个SHEET
sheet1=wb.createSheet("
数据解析"
String[]title={"
url"
"
标题"
评论"
时间"
内容"
本地相对路径"
};
inti=0;
//创建一行
Rowrow=sheet1.createRow((short)0);
//填充标题
for(Strings:
title){
Cellcell=row.createCell(i);
cell.setCellValue(s);
i++;
//下面是填充数据的部分代码
AtomicIntegerid=newAtomicInteger(0);
Rowrow=sheet1.createRow((short)id.incrementAndGet());
row.createCell(0).setCellValue(url);
row.createCell
(1).setCellValue(title);
row.createCell
(2).setCellValue(comment);
row.createCell(3).setCellValue(time);
row.createCell(4).setCellValue(contents);
row.createCell(5).setCellValue(path);
4.3改进4.2中自己的网络爬虫,将抓取的数据直接写到数据库中。
实现代码由学生自己完成。
使用JDBC连接数据库,要先导入mysql-connector-java-5.1.6-bin.jar包。
表的创建可以参考如下sql语句:
createtablet_mess(
idint(4)notnullprimarykeyauto_increment,
urlvarchar(255)notnull,
titlevarchar(255),
datevarchar(255),
contentTEXT(10000),
pathvarchar(255));