springboot添加webmagic_springboot+webmagic实现java爬虫jdbc及mysql

public classCsdnBlogPageProcessor implements PageProcessor {private static String username="CHENYUFENG1991"; //设置csdn用户名

private static int size = 0;//共抓取到的文章数量//抓取网站的相关配置,包括:编码、抓取间隔、重试次数等

private Site site = Site.me().setRetryTimes(3).setSleepTime(1000);publicSite getSite() {returnsite;

}//process是定制爬虫逻辑的核心接口,在这里编写抽取逻辑

public voidprocess(Page page) {//列表页

if (!page.getUrl().regex("http://blog\\.csdn\\.net/" + username + "/article/details/\\d+").match()) {//添加所有文章页

page.addTargetRequests(page.getHtml().xpath("//div[@id='article_list']").links()//限定文章列表获取区域

.regex("/" + username + "/article/details/\\d+")

.replace("/" + username + "/", "http://blog.csdn.net/" + username + "/")//巧用替换给把相对url转换成绝对url

.all());//添加其他列表页

page.addTargetRequests(page.getHtml().xpath("//div[@id='papelist']").links()//限定其他列表页获取区域

.regex("/" + username + "/article/list/\\d+")

.replace("/" + username + "/", "http://blog.csdn.net/" + username + "/")//巧用替换给把相对url转换成绝对url

.all());//文章页

} else{

size++;//文章数量加1//用CsdnBlog类来存抓取到的数据,方便存入数据库

CsdnBlog csdnBlog = newCsdnBlog();//设置编号

csdnBlog.setKey(Integer.parseInt(

page.getUrl().regex("http://blog\\.csdn\\.net/" + username + "/article/details/(\\d+)").get()));//设置标题

csdnBlog.setTitle(

page.getHtml().xpath("//div[@class='article_title']//span[@class='link_title']/a/text()").get());//设置内容

csdnBlog.setContent(

page.getHtml().xpath("//div[@class='article_content']/allText()").get());//设置日期

csdnBlog.setDates(

page.getHtml().xpath("//div[@class='article_r']/span[@class='link_postdate']/text()").get());//设置标签(可以有多个,用,来分割)

csdnBlog.setTags(listToString(page.getHtml().xpath("//div[@class='article_l']/span[@class='link_categories']/a/allText()").all()));//设置类别(可以有多个,用,来分割)

csdnBlog.setCategory(listToString(page.getHtml().xpath("//div[@class='category_r']/label/span/text()").all()));//设置阅读人数

csdnBlog.setView(Integer.parseInt(page.getHtml().xpath("//div[@class='article_r']/span[@class='link_view']")

.regex("(\\d+)人阅读").get()));//设置评论人数

csdnBlog.setComments(Integer.parseInt(page.getHtml()

.xpath("//div[@class='article_r']/span[@class='link_comments']").regex("\\((\\d+)\\)").get()));//设置是否原创

csdnBlog.setCopyright(page.getHtml().regex("bog_copyright").match() ? 1 : 0);//把对象存入数据库

newCsdnBlogDao().add(csdnBlog);//把对象输出控制台

System.out.println(csdnBlog);

}

}//把list转换为string,用,分割

public static String listToString(ListstringList) {if (stringList == null) {return null;

}

StringBuilder result= newStringBuilder();

boolean flag= false;for (String string: stringList) {if(flag) {

result.append(",");

}else{

flag= true;

}

result.append(string);

}returnresult.toString();

}public static voidmain(String[] args) {longstartTime, endTime;

System.out.println("【爬虫开始】...");

startTime=System.currentTimeMillis();//从用户博客首页开始抓,开启5个线程,启动爬虫

Spider.create(new CsdnBlogPageProcessor()).addUrl("http://blog.csdn.net/" + username).thread(5).run();

endTime=System.currentTimeMillis();

System.out.println("【爬虫结束】共抓取" + size + "篇文章,耗时约" + ((endTime - startTime) / 1000) + "秒,已保存到数据库,请查收!");

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值