admin 管理员组文章数量: 887019
说到爬虫,大家第一个想到的肯定是python的scrapyd爬虫。但是大家不知道吧,我们的java也有相应的爬虫工具。今天就给大家介绍一下我们java的爬虫工具。
我们今天要介绍的爬虫工具,名字叫做webmagic,webmagic的架构图如下所示:
如图所示,它主要分为四个部分:
Downloader(页面下载)
PageProcessor(页面分析及链接抽取)
Scheduler(URL管理)
Pipeline(后续处理和持久化)
webmagic的用法其实很简单,复杂的部分webmagic都替我们封装好了,接下来开始我们爬虫历程。
1.首先引入webmagic的依赖1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
us.codecraft
webmagic-core
0.6.1
us.codecraft
0.6.1
webmagic-extension
us.codecraft
webmagic-selenium
0.6.1
org.seleniumhq.selenium
selenium-java
3.3.1
2.创建PageProcessor,用来处理网页数据1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21/**
* @author linzhiqiang
*/
public class CsdnBlogProcessor implements PageProcessor {
private Site site = Site
.me()
.setDomain("csdn")
.setSleepTime(3000)
.setUserAgent(
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31");
@Override
public void process(Page page) {
System.out.println("html:"+page.getHtml());
}
@Override
public Site getSite() {
return site;
}
}
site中放置爬取的网站域名、cookie、请求头等信息。
process用来处理爬取到的网页数据,处理完的数据可以通过page.putField(),再通过Pipeline获取存储到数据库。
3.创建Pipeline,存储处理好的网页数据1
2
3
4
5
6
7
8
9
10
11public class CsdnPipeline implements Pipeline {
@Override
public void process(ResultItems resultItems, Task task) {
//文章题目
String title = resultItems.get("title");
//文章内容
String context = resultItems.get("context");
System.out.println("title:" + title);
System.out.println("context:" + context);
}
}
在process中通过resultItems来获取PageProcessor存储的page数据,最后我们可以将数据存储到redis、数据库、文件等地方。
4.利用Scheduler调度爬取任务1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29public class RedisScheduler extends DuplicateRemovedScheduler implements
MonitorableScheduler, DuplicateRemover {
@Override
public int getLeftRequestsCount(Task task) {
return 0;
}
@Override
public boolean isDuplicate(Request request, Task task) {
return false;
}
@Override
public void resetDuplicateCheck(Task task) {
}
@Override
public int getTotalRequestsCount(Task task) {
return 0;
}
private int num = 0;
@Override
public Request poll(Task task) {
Request request = new Request("http://my.oschina/flashsword/blog/180623");
return request;
}
}
我们可以将我们要爬虫的任务,添加到Scheduler中,然后按照顺序一一爬取。
5.启动爬虫程序,开始爬取数据1
2
3
4
5
6
7
8public static void main(String[] args) {
RedisScheduler redisScheduler = new RedisScheduler();
Spider.create(new CsdnBlogProcessor())
.setScheduler(redisScheduler)
.addPipeline(new CsdnPipeline())
.thread(1)
.run();
}
从打印结果中,我们可以看到我们已经成功爬取到数据了。
作者:林志强
版权声明:本文标题:java爬取网页链接,如何用java来爬取网页 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1726434721h959996.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论