我这里只实现了十分基础的功能,可以用作入门了解的参考。
准备工作:
1.需要到官网下载相关的jar包,并且导入到工程中(导入的方法请自行了解~)
2.这里用的是xpath的搜索方法,相关语法等,需要简单了解
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.processor.PageProcessor;
public class hi implements PageProcessor {
// 抓取网站的相关配置,包括编码、抓取间隔、重试次数等
private Site site = Site.me().setRetryTimes(3).setSleepTime(100);
private static int count =0;
@Override
public Site getSite() {
return site;
}
@Override
public void process(Page page) {
//判断链接是否符合 [a-z 0-9 -]*是任意数字字母
if(!page.getUrl().regex("http://blog.csdn.net/zuoxiaolong8810/article/details/[a-z 0-9 -]*.html").match()){
page.addTargetRequests(
page.getHtml().xpath("//*[@id=\"article_list\"]/div/div/h1/span/a/@href").all());//获取我需要的链接
System.out.println("文章标题:"+ page.getHtml().xpath("/html/head/title/text()").get() );//输出需要的内容(这里我需要的是标题)
count ++;
}
//把符合这个网址格式的,加入到爬取队列
page.addTargetRequests(page.getHtml().links().regex("(http://blog.csdn.net/zuoxiaolong8810/article/list/[a-z 0-9 -]*)").all());
}
public static void main(String[] args) {
long startTime, endTime;
System.out.println("开始爬取...");
startTime = System.currentTimeMillis();
Spider.create(new hi()).addUrl("http://blog.csdn.net/zuoxiaolong8810/article/list/1").thread(5).run();//从这个网址开始获取
endTime = System.currentTimeMillis();
System.out.println("爬取结束,耗时约" + ((endTime - startTime) / 1000) + "秒,抓取了"+count+"条记录");
}
}
xpath的值应该怎么填?
1.用chrome浏览器,对着需要获取的值,右键->检查,然后查看需要的内容
2.找到需要的内容后,右键->copy->xpath
3.之后可能需要自己再补充(比如:/@href)