记录用WebMagic爬虫框架写第一个爬虫项目

暑假闲来无事,逛了逛技术论坛,发现有一个简单的爬虫项目,用java实现。正好这学期也是学习了简单的java基础,就当是暑假的作业学习一下,写在这里算是对我学习的一个记录。
先找到了一个爬虫框架WebMagic,还有官方文档,对于整个爬虫框架的设计思想还有架构以及讲述的非常全面了。
首先先在webmagic上下载需要的所有jar包,webmagic默认使用的是maven管理。在这里我并没有使用maven管理,在项目中build-path了相应的jar驱动包。整个爬虫的项目运行基本分为四个组件:Downloader(下载)、PageProcessor(处理)、Scheduler(管理)、Pipeline(持久化)。然后开始码代码。(这里对github进行爬虫,具体爬虫信息需求还需要另外学习:( )

import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.pipeline.JsonFilePipeline;
import us.codecraft.webmagic.processor.PageProcessor;
public class WebSpider implements PageProcessor{
	private Site site=Site.me().setRetryTimes(3).setSleepTime(100);
	
	
	@Override
	public void process(Page page) {
		// TODO Auto-generated method stub
		//添加目标请求页面,下面这段代码就用到了正则表达式,它表示匹配所有"https://github.com/code4craft/webmagic"这样的链接。
		page.addTargetRequests(page.getHtml().links().regex("(https://github\\.com/\\w+/\\w+)").all());
		//获取的信息--author最后转换为String类型数据,注意:putField的内容可以根据需求改变!!
		page.putField("author",page.getUrl().regex("https://github\\.com/(\\w+)/.*").toString());
		//下面这段代码使用了XPath,它的意思是“查找所有class属性为'entry-title public'的h1元素,并找到他的strong子节点的a子节点,并提取a节点的文本信息”。
		page.putField("name",page.getUrl().xpath("//h1[@class='entry-title public']/strong/a/text()").toString());
		
		if(page.getResultItems().get("name")==null) {
			//如果page的name==null,则跳过这个page
			page.setSkip(true);
		}
		page.putField("readme",page.getHtml().xpath("//div[@id='readme']/tidyText()"));
		
	}
	@Override
	public Site getSite() {
		// TODO Auto-generated method stub
		return site;
	}
	public static void main(String[] args){
		Spider.create(new WebSpider())
		.addUrl("https://github.com/code4craft")  //从当前的链接指向网站开始抓取
		.addPipeline(new JsonFilePipeline("D:\\webmagic\\"))   //抓取的结果用pipeline保存为json的格式
		.thread(5)   //开启5个线程来抓取
		.run();     //启动爬虫
	}
	
}

在编写过程中出现了一些小问题,需要记得的是在Spider.class文件中Attach source;
输出日志需要在项目中添加file,并命名为log4j.properties
并在此文件中写入

log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout

控制台获取了日志信息,当然不添加此文件,也是可以运行的,只是无日志文件。
哦啊冲!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值