admin 管理员组

文章数量: 887007

java使用webMagic爬虫

WebMagic是一个简单灵活且功能强大的Java爬虫框架。它旨在提供一种方便快捷的方式,让开发者能够快速构建一个爬虫。以下是关于WebMagic的基本使用。

1. 环境准备

  • Java环境(JDK 1.8及以上版本)
  • Maven或Gradle构建工具
  • 一个文本编辑器或IDE(如IntelliJ IDEA)

2. 安装WebMagic

通过Maven或Gradle将WebMagic添加到你的项目中。

2.1 Maven

在项目的pom.xml文件中添加以下依赖:

     <groupId>us.codecraft</groupId>
            <artifactId>webmagic-core</artifactId>
            <version>0.10.0</version>
        </dependency>
        <dependency>
            <groupId>us.codecraft</groupId>
            <artifactId>webmagic-extension</artifactId>
            <version>0.10.0</version>
        </dependency>

注意:在webMagic的官方文档中给出的依赖是 0.7.3这个版本只能进行爬取http协议,所以为了避免这些麻烦,我就就直接使用最新版本的框架了.

2.2 Gradle

使用Gradle可以在build.gradle文件中添加如下依赖:

dependencies {
    implementation 'us.codecraft:webmagic-core:0.7.3'
}

也建议更改为最新版本.

三、编写第一个爬虫

下面是一个简单的WebMagic爬虫示例,这里我要进行爬取新浪博客现在排名第一的徐小明的博客的全部的内容.

爬取的链接:https://blog.sina/s/articlelist_1300871220_0_1.html

package com.fs.spider;

import cn.hutool.core.util.StrUtil;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.processor.PageProcessor;
import java.util.List;

class MySpiderTest implements PageProcessor {
	 public static final String url = "https://blog.sina/s/articlelist_1300871220_0_1.html";
	 public static  String urlcopy = "https://blog.sina/s/articlelist_1300871220_0_{}.html";
	 public static int pageSize = 1;

	// 创建一个爬虫站点的配置信息
	 public static Site site=Site
			 .me() // 创建一个默认的site方法
			 .setSleepTime(3000) // 请求的间隔时间
			 .setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36");


	@Override  // 获取到网页内容后对网页进行逻辑处理
	public void process(Page page) {
		// 获取到爬取链接的,根据链接进行判断是内容还是网页列表
		String url = page.getUrl().get();
		if(url.contains("articlelist")){
			List<String> list = page.getHtml().xpath("//div[@class=\"articleList\"]")
					.links() // 获取到改元素下的所有的链接
					.all(); // 返回所有的抽取结果到list中
			// 将获取链接进行添加到爬取的目标队列当中,继续进行爬取
			page.addTargetRequests(list);
			// 爬取下一页操作
			pageSize++;
			page.addTargetRequest(StrUtil.format(urlcopy,pageSize));
		// 进行爬取文章的内容
		}else{
			// 提取到的标题存储到页面对象
			// smartContent:获取到元素下所有的文本内容
			page.putField("title",page.getHtml().xpath("//div[@class='articalTitle']/h2").smartContent());
			// 获取到文章的内容
			page.putField("content", page.getHtml().xpath("//div[@id='articlebody']//div[@class='articalContent']").smartContent());
			// 获取到发布的时间
			page.putField("date", page.getHtml().xpath("//div[@id='articlebody']//span[@class='time SG_txtc']").regex("\\((.*)\\)"));
		}
	}

	@Override  // 进行配置爬虫站点的请求的信息配置
	public Site getSite() {
		return site;
	}

	public static void main(String[] args) {
		// 创建一个爬虫程序,即这里为本页面的爬虫程序
		Spider spider = Spider.create(new MySpiderTest());
		spider.addUrl(url).run();
	}
}

运行main方法,可以在控制台进行看见爬取获取到的文章的标题,内容,发布时间等,

五、高级特性

WebMagic提供了一些高级特性,如:

  • 动态网页爬取:可以使用WebMagic的Downloader来模拟浏览器行为。
  • 结果持久化:可以自定义Pipeline,将结果保存到文件或数据库。
  • 去重机制:WebMagic内置了URL去重机制,避免重复爬取。

六、注意事项

  • 遵守robots.txt:尊重目标网站的爬取规则。
  • 合理设置爬取频率:避免给目标网站带来过大压力。
  • 使用代理和User-Agent:降低被封禁的风险。

七、社区与支持

WebMagic有一个活跃的社区,你可以通过以下方式获得帮助:

  • 官方文档:http://webmagic.io/docs/en/
  • GitHub仓库:https://github/code4craft/webmagic
  • 社区论坛:http://webmagic.io/forum/

本文标签: 爬虫 java WebMagic