基于webmagic的种子网站爬取
2024-08-29 19:19:13
1. 概述
因为无聊,闲来没事做,故突发奇想,爬个种子,顺便学习爬虫。本文将介绍使用Spring/Mybatis/webmagic等框架构建项目并爬取种子磁链。
2. 项目搭建
如下图为本项目的工程结构,主要代码实现在Spider包中。
3. 数据库设计
参考众多的种子网站,找到描述种子的常用属性,如下:
4. 程序实现
1. 爬虫配置
在抓取种子之前,首先要确定所要抓取的网站地址、编码、抓取时间间隔、重试次数等信息,如下:
//设置网站源
private static String netSite="PushBT";
private Site site = Site.me().setDomain("http://www.pushbt.com")
.setCharset("UTF-8").setSleepTime(1000)//编码
.setRetryTimes(3);//重试次数
private static String BASE_URL="http://www.pushbt.com";
2. 逻辑编写
process方法是爬虫的核心接口,所有的属性抽取都在此方法中实现
@Override
public void process(Page page) {
//定义如何抽取页面信息,并保存下来
List<String> links = page.getHtml().xpath("//table[@class='items']//tr[@class='odd']/td[2]/a/@href").all();
//将需要待爬的网页地址都存下来,以待后续从中取出
targetUrlList=StringUtil.linkURL(BASE_URL, links);
page.addTargetRequests(targetUrlList);
Seeds seed = new Seeds();
// 获取名称
String name = page.getHtml().xpath("//ul[@id='filelist']//li/span/@title").toString();
if (name==null||"".equals(name)||service.isExistByName(name)) {//名称为空,则跳过;已存在(true),则跳过
page.setSkip(true);
count++;
LOG.info("skip the "+count+" ,title : "+name);
return;
}
page.putField("name", name);
seed.setSeedName(name);
// 获取hash值(无hash值,默认为null)
// String hash = page.getHtml().xpath("//p[@class='dd desc']//b[2]/text()").toString();
page.putField("hash", null);
seed.setSeedHash(null);
// 描述(没有描述信息,则默认为名称)
// String desc = page.getHtml().xpath("//div[@class='dd filelist']/p/text()").toString();
page.putField("desc", name);
seed.setSeedDes(name);
// 文件个数
String number = page.getHtml().xpath("//ul[@class='params-cover']/li[4]/div[@class='value']/text()").toString();
page.putField("number", number);
seed.setNumber(number);
// 文件大小
String size = page.getHtml().xpath("//ul[@class='params-cover']/li[5]/div[@class='value']/text()").toString();
page.putField("size", size);
seed.setSize(size);
// 获取收录时间
String includeDate = page.getHtml().xpath("//ul[@class='params-cover']/li[2]/div[@class='value']/text()").toString();
page.putField("includeDate", includeDate);
seed.setIncludeTime(includeDate);
//最近下载时间
String recentlyDown = page.getHtml().xpath("//ul[@class='params-cover']/li[3]/div[@class='value']/text()").toString();
page.putField("recentlyDown", recentlyDown);
seed.setRecentlyDown(recentlyDown);
// 人气
String popularity = page.getHtml().xpath("//ul[@class='params-cover']/li[6]/div[@class='value']/text()").toString();
page.putField("popularity", popularity);
seed.setPopularity(popularity);
// 下载速度
// String speed = page.getHtml().xpath("//p[@class='dd desc']//b[7]/text()").toString();
page.putField("speed", SpiderUtil.getSpeed(popularity));
seed.setSpeed(SpiderUtil.getSpeed(popularity));
// 获取磁力链接
String magnet = page.getHtml().xpath("//ul[@class='params-cover']/li[9]/div[@class='value']/a/@href").toString();
page.putField("magnet", magnet);
seed.setMagnet(magnet);
// 标签(在详情页面没有tag,暂时以热门搜索为tag)
List<String> tags = page.getHtml().xpath("//div[@class='block oh']/a/span/text()").all();
page.putField("tags", tags);
seed.setTag(tags.toString());
seed.setCreateTime(new Date());
seed.setUpdateTime(new Date());
seed.setSource(netSite);
seed.setCategory("movies");
//保存到数据库
service.insert(seed);
}
3. 其它部分编写
例子用到的其他部分代码,如MVC,数据库操作等,不是本章节的重点,所以不一一介绍了
5. 成果展示
基于webmagic的种子网站爬取
注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权
最新文章
- Qt:Drag-Drop操作在QGraphicsView及Model/View框架下的实现
- Nutch插件原理
- ubuntu linux 下wine的使用
- 【1】CommonCode快速代码集
- hosts文件不显示
- mysqldump备份还原mysql
- spring加载异常
- (四) 虚拟摄像头vivi体验
- Codeforces878 A. Short Program
- Mono.Cecil
- docker环境 宿主机和容器之间复制文件
- Python实现批量梯度下降算法
- Http指南(3)
- Shiro笔记(一)基本概念
- <;jsp:include>;动作元素,附:最易出错的一点
- Array.Resize(ref arry, size);
- linux 安装Swagger(swagger-editor , swagger-ui)
- tesseract-ocr训练方法
- C# WebHelper-CookieHelper,CacheHelper,SessionHelper
- 广义线性模型 - Andrew Ng机器学习公开课笔记1.6
热门文章
- centos6.5 以 zero-dependency Erlang from RabbitMQ 搭建环境
- flask框架基本使用(4)(钩子函数,异常,命令行运行)
- 如何将django部署从顶级目录迁移到子目录下(NGINX UWSGI DJANGO)
- Python的网络编程[5] ->; BOOTP + TFTP + FTP ->; 实现一个简单的文件传输流程
- NOIP2018提高组模拟题(二)
- 解密Java内存溢出之持久代
- bzoj 1879: [Sdoi2009]Bill的挑战
- 1.13(java学习笔记)异常机制
- Intent创建Activity
- SimpleDateFormat格式