WebMagic爬取豆瓣读书的书籍数据

本次案例主要是爬取豆瓣读书的标签列表以及每个标签下的书籍名称、对应的URL,然后输出到控制台。

1、引入webmagic的依赖

	<!-- webmagic爬虫 -->
	<dependency>
	    <groupId>us.codecraft</groupId>
	    <artifactId>webmagic-core</artifactId>
	    <version>0.7.3</version>
	</dependency>
	<dependency>
	    <groupId>us.codecraft</groupId>
	    <artifactId>webmagic-extension</artifactId>
	    <version>0.7.3</version>
	</dependency>

2、编写爬虫类


public class WebMagicTest implements PageProcessor {
	
	/**
	 * 利用正则表达式匹配标签下的书籍列表界面URL
	 * 例如:https://book.douban.com/tag/名著
	 */
	static String tagLinks="https://book.douban.com/tag/.*";
	static Pattern tagLinksPattern=Pattern.compile(tagLinks);

	//抓取网站的相关配置,包括编码、抓取间隔、重试次数等
    private Site site = Site.me().setRetryTimes(3).setSleepTime(1000);
	
	public static void main(String[] args) {
		//启动爬虫
		Spider.create(new WebMagicTest()).addUrl("https://book.douban.com/tag/?view=type")
			.thread(1).run();
	}

	// process是定制爬虫逻辑的核心接口,在这里编写抽取逻辑
	@Override
	public void process(Page page) {
		Html html=page.getHtml();
		
		/**
		*豆瓣读书标签列表页面
		*在这个界面获取标签的URL,并加入爬取URL队列
		*/
		if (page.getUrl().toString().equals("https://book.douban.com/tag/?view=type")) {
			String douban="https://book.douban.com/tag/";
			//匹配<table class="tagCol">下的<tbody>标签下的<tr>标签下的<td>标签下的<a>中的内容
			List<String> tags=html.xpath("//table[@class='tagCol']/tbody/tr/td/a/text()").all();
			//补全URL,并加入爬去队列
			for (String string : tags) {
				page.addTargetRequest(douban+string);
			}
		}
		
		/**
		*豆瓣读书标签下的书籍列表界面
		*输出标签名以及书籍信息
		*/
		else if(tagLinksPattern.matcher(page.getUrl().toString()).matches()) {
			
			//获取标签名
			String tag=html.xpath("//div[@id='content']/h1/text()").get();
			String[] tagSplit=tag.split(" ");
			//输出标签名
			System.out.println("<----"+tagSplit[1]+"---->");
			
			//获取书籍信息
			List<String> circles=html.xpath("//li[@class='subject-item']/div[@class='info']/h2/a/text()").all();
			List<String> circleUrls=html.xpath("//li[@class='subject-item']/div[@class='info']/h2/a/@href").all();
			//输出书籍信息
			for (int k=0;k<circles.size();k++) {
				System.out.print("序号: "+(k+1)+" 书名:");
				System.out.print(circles.get(k)+" 地址:");
				System.out.print(circleUrls.get(k)+" ID:");
				String[] ids=circleUrls.get(k).split("/");
				System.out.println(ids[ids.length-1]);
				
			}
			//换行
			System.out.println();
		}

	}

	//返回抓取网站的相关配置
	@Override
	public Site getSite() {
		return site;
	}

}

3、控制台输出截图
在这里插入图片描述

这只是一个简单的例子,具体爬取数据需要分析html界面,从中获取我们想要的数据。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
爬取豆瓣读书Top250的数据通常涉及网络爬虫技术,这是一个常见的数据抓取和数据分析项目。以下是大致的步骤: 1. **明确目标**:首先,你需要访问豆瓣读书Top250的页面(https://book.douban.com/top250/)以确定数据结构。 2. **分析网页结构**:查看网页源代码或使用开发者工具检查数据是如何呈现的。可能包含HTML、JSON或API接口。 3. **选择爬取方法**: - 如果是直接从HTML获取,可能需要使用如Python的BeautifulSoup或Scrapy等库来解析网页。 - 如果网站提供了API,那么使用API会更方便,但要确保遵循其使用规定,可能需要注册应用或处理OAuth授权。 4. **编写爬虫脚本**:使用Python的requests库发送HTTP请求,然后处理返回的HTML或API响应。对于爬取数据,通常需要解析title、作者、评分、简介等信息。 5. **数据存储**:将抓取到的数据保存到文件(如CSV、JSON或数据库)中,方便后续分析。 6. **异常处理和反爬策略**:注意可能遇到的验证码、动态加载、速率限制等问题,可能需要设置延时、代理或使用Selenium等工具模拟浏览器行为。 7. **合法性**:在进行爬取之前,确保你的行为符合网站的使用政策,尊重版权并避免对服务器造成过度压力。 **相关问题--:** 1. 豆瓣读书的API接口可用吗?如果可用,如何使用? 2. 如何处理HTML中的JavaScript数据,如果数据不在静态HTML里? 3. 为了防止被豆瓣封禁,应该如何合理设置爬虫的频率和策略?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值