《java爬虫系列第一讲-爬虫入门》爬取电影列表信息 全球头条
1. 目标
(相关资料图)
使用webmagic爬取动作电影列表信息
爬取电影**《海王》**详细信息【电影名称、电影迅雷下载地址列表】
2. 爬取最新动作片列表
抓取列表信息
这个代码是在第一讲中创建的,需要了解的朋友可以查看第一讲的内容"《java爬虫系列第一讲-爬虫入门》"
将代码导入idea中
新建包com.ady01.demo2.filmlist,本次示例代码全部放在该包中
列表页面数据来源http://m.ady01.com/rs/film/listJson/1/1,是一个json数据
根据http://m.ady01.com/rs/film/listJson/1/1中的数据格式,我们先分析一下
最外层是一个分页的类dataList是一个集合,内部每项是一个电影资源的信息
创建com.ady01.demo2.filmlist.PageModel类,用于保存分页电影信息
package com.ady01.demo2.filmlist;import lombok.*;import java.io.Serializable;import java.util.List;/** * description:分页对象 * time:2019-04-21 13:46 * author: 微信公众号:路人甲Java,专注于java技术分享(爬虫、分布式事务、异步消息服务、任务调度、分库分表、大数据等),喜欢请关注! */@Getter@Setter@NoArgsConstructor@ToStringpublic class PageModel implements Serializable {private static final long serialVersionUID = 1L; /** * 每页显示数量 */ private long pageSize; /** * 当前页行的开始行的索引,如1,2,3.... */ private long startIndex; /** * 当前页行的结束索引 */ private long endIndex; /** * 当前页 */ private long currentPage; /** * 上一页索引 */ private long prePage; /** * 下一页索引 */ private long nextPage; /** * 总记录数 */ private long count; /** * 是否有上一页 */ private boolean hasPrePage; /** * 是否有下一页 */ private boolean hasNextPage; /** * 总页数 */ private long pageCount; /** * 数据集合 */ private ListdataList;}
创建com.ady01.demo2.filmlist.FilmModel类,用于保存电影信息
package com.ady01.demo2.filmlist;import lombok.Getter;import lombok.NoArgsConstructor;import lombok.Setter;import lombok.ToString;import java.io.Serializable;import java.util.Map;/** * description:电影信息 * time:2019/4/21 12:35 * author:微信公众号:路人甲Java,专注于java技术分享(爬虫、分布式事务、异步消息服务、任务调度、分库分表、大数据等),喜欢请关注! */@Setter@Getter@NoArgsConstructor@ToStringpublic class FilmModel implements Serializable{private static final long serialVersionUID = 1L; /** * 编号 */ private java.lang.Long id; /** * 片名,完整名称,不包含无关文字 */ private java.lang.String name; /** * 片名全拼音(小写),如英雄:yingxiong */ private java.lang.String full_spell; /** * 片名简拼(小写),如英雄:yx */ private java.lang.String short_spell; /** * 标题,可能和片名不同,里面有可能包含推广相关文字 */ private java.lang.String title; /** * 关键词,多个之间用逗号隔开 */ private java.lang.String keywords; /** * 描述 */ private java.lang.String description; /** * 1:电影,2:自定义专辑系列 */ private java.lang.Integer type; /** * 来源站点 */ private java.lang.Long site_id; /** * 来源页面 */ private java.lang.String source_url; /** * 简介,关联t_content_id */ private java.lang.Long content_id; /** * 评分 */ private java.lang.String score; /** * 来源页面中资源唯一标志,用于去重使用 */ private java.lang.String source_uid; /** * 创建时间 */ private java.lang.Long create_time; /** * 发布时间 */ private java.lang.Long pub_time; /** * 最后更新时间 */ private java.lang.Long update_time; /** * 状态信息 */ private java.lang.Integer status; /** * 版本号 */ private java.lang.Long version; /** * 扩展数据 */ private MapextData;}
创建列表数据采集器com.ady01.demo2.filmlist.FilmListPageProcessor
package com.ady01.demo2.filmlist;import com.ady01.demo2.filmdetail.FilmDetailModel;import com.ady01.demo2.filmdetail.FilmDetailPageProcessor;import com.alibaba.fastjson.JSON;import lombok.extern.slf4j.Slf4j;import us.codecraft.webmagic.Page;import us.codecraft.webmagic.Request;import us.codecraft.webmagic.Site;import us.codecraft.webmagic.Spider;import us.codecraft.webmagic.processor.PageProcessor;/** * description:电影列表页面数据采集器 * time:2019/4/21 12:40 * author:微信公众号:路人甲Java,专注于java技术分享(爬虫、分布式事务、异步消息服务、任务调度、分库分表、大数据等),喜欢请关注! */@Slf4jpublic class FilmListPageProcessor implements PageProcessor {public static PageModel collector(String url) {return new FilmListPageProcessor(url).collect().getPageModel(); } private Site site = Site.me().setRetryTimes(3).setSleepTime(100).setTimeOut(10000); //需要采集的页面 private String url; //采集的数据 private PageModel pageModel; public FilmListPageProcessor(String url) {this.url = url; } public FilmListPageProcessor collect() {Request request = new Request(url); Spider.create(this).thread(1).addRequest(request).run(); return this; } @Override public void process(Page page) {String text = page.getRawText(); log.info("列表页面数据:{}", text); this.pageModel = JSON.parseObject(text, PageModel.class); } @Override public Site getSite() {return this.site; } public PageModel getPageModel() {return pageModel; } public void setPageModel(PageModel pageModel) {this.pageModel = pageModel; }}
测试用例com.ady01.demo2.filmlist.FilmListPageProcessorTest
package com.ady01.demo2.filmlist;import lombok.extern.slf4j.Slf4j;import org.junit.Test;/** * description: * time:2019/4/21 13:59 * author:微信微信公众号:路人甲Java,专注于java技术分享(爬虫、分布式事务、异步消息服务、任务调度、分库分表、大数据等),喜欢请关注!,专注于java技术分享(爬虫、分布式事务、异步消息服务、任务调度、分库分表、大数据) */@Slf4jpublic class FilmListPageProcessorTest {@Test public void collect() {String url = "http://m.ady01.com/rs/film/listJson/1/1"; PageModel collector = FilmListPageProcessor.collector(url); log.info("\n\n\n列表页面数:{}", collector); }}
运行 com.ady01.demo2.filmlist.FilmListPageProcessorTest#collect()方法,结果如下:
3. 爬取电影《海王》迅雷地址
创建com.ady01.demo2.filmdetail.FilmDetailModel类,用于封装电影详细信息
package com.ady01.demo2.filmdetail;import lombok.Getter;import lombok.Setter;import lombok.ToString;import java.io.Serializable;import java.util.List;/** * description:电影详细信息 * time:2019/4/21 13:18 * author:微信公众号:路人甲Java,专注于java技术分享(爬虫、分布式事务、异步消息服务、任务调度、分库分表、大数据等),喜欢请关注! */@Setter@Getter@ToStringpublic class FilmDetailModel implements Serializable {private static final long serialVersionUID = 1L; /** * 编号 */ private java.lang.Long id; /** * 片名,完整名称,不包含无关文字 */ private java.lang.String title; /** * 下载地址列表 */ private ListdownList;}
创建详情页采集器com.ady01.demo2.filmdetail.FilmDetailPageProcessor
package com.ady01.demo2.filmdetail;import lombok.extern.slf4j.Slf4j;import us.codecraft.webmagic.Page;import us.codecraft.webmagic.Request;import us.codecraft.webmagic.Site;import us.codecraft.webmagic.Spider;import us.codecraft.webmagic.processor.PageProcessor;import us.codecraft.webmagic.selector.Selectable;import java.util.List;import java.util.Objects;import java.util.stream.Collectors;/** * description:电影详情页采集器,采集电影详细信息 * time:2019/4/21 12:40 * author:微信公众号:路人甲Java,专注于java技术分享(爬虫、分布式事务、异步消息服务、任务调度、分库分表、大数据等),喜欢请关注! */@Slf4jpublic class FilmDetailPageProcessor implements PageProcessor {public static FilmDetailModel collector(long film_id) {return new FilmDetailPageProcessor(film_id).collect().getFilmDetailModel(); } private Site site = Site.me().setRetryTimes(3).setSleepTime(100).setTimeOut(10000); //电影资源id private long film_id; //采集的数据 private FilmDetailModel filmDetailModel; public FilmDetailPageProcessor(long film_id) {this.film_id = film_id; } public FilmDetailPageProcessor collect() {Request request = new Request(String.format("http://m.ady01.com/rs/film/detail/%s", this.film_id)); Spider.create(this).thread(1).addRequest(request).run(); return this; } @Override public void process(Page page) {String text = page.getRawText(); log.info("列表页面数据:{}", text); this.filmDetailModel = new FilmDetailModel(); //电影标题 String title = page.getHtml().$("span[class="film_title"]","text").get(); this.filmDetailModel.setId(this.film_id); this.filmDetailModel.setTitle(title); //电影下载地址downList ListdownNodes = page.getHtml().$("div.film_downurl_txt").nodes(); if (Objects.nonNull(downNodes)) {ListdownList = downNodes.stream().map(item -> item.$("div", "text").get()).collect(Collectors.toList()); this.filmDetailModel.setDownList(downList); } } @Override public Site getSite() {return this.site; } public FilmDetailModel getFilmDetailModel() {return filmDetailModel; } public void setFilmDetailModel(FilmDetailModel filmDetailModel) {this.filmDetailModel = filmDetailModel; }}
创建测试用例com.ady01.demo2.filmdetail.FilmDetailPageProcessorTest
package com.ady01.demo2.filmdetail;import com.ady01.demo2.filmlist.FilmListPageProcessor;import com.ady01.demo2.filmlist.PageModel;import com.ady01.util.FrameUtil;import lombok.extern.slf4j.Slf4j;import org.junit.Test;@Slf4jpublic class FilmDetailPageProcessorTest {@Test public void collect() {long film_id = 46612L; FilmDetailModel filmDetailModel = FilmDetailPageProcessor.collector(46612L); log.info("\n\n\n电影《海王》详情:{}", FrameUtil.json(filmDetailModel, true)); }}
运行测试用例com.ady01.demo2.filmdetail.FilmDetailPageProcessorTest#collect()
4. 总结
webmagic中支持xpath、$选择器的方式获取页面中的元素信息,使用非常方便,如果你们对jquery比较熟悉,可以直接使用类似于jquery选择器的语法来解析整个页面的内容;还有xpath的语法,后期会有专门讲解xpath的语法,敬请关注。有问题的可以留言。下期咱们一起来抓取极客时间上面的课程信息爱电影这个网站就是用webmagic做的,内部包含自动采集功能,每天自动采集大量大于资源,爬虫系列完结之后,将把整个网站的源码风险给大家,资源会在公众号中发布,可以提前关注一下公众号**【路人甲Java】
标签:
相关推荐:
最新新闻:
- 《java爬虫系列第一讲-爬虫入门》爬取电影列表信息 全球头条
- requests出现编码问题怎么办?编码问题的解决办法
- php/goodsDetail:页面绑定点击事件和传递
- 环球看点!传感器模块是如何应用于手机的?分享传感器模块之于手机方面的应用
- 鼠标事件:MouseEventer接口的5个方法_世界热文
- 【架构图】FFmpeg的库函数源代码分析:天天通讯
- 学习Java开发的第一步——安装配置
- KIS7:现有的栈溢出检测模式的改进:天天聚看点
- 小程序开发外包费用一般是多少?小程序开发外包的总成本有哪些?
- mysql索引选择错误的几种情况 mysql之优化器选择索引|天天热门
- 改错前奥运参赛国的出场次序(附程序)_焦点精选
- 什么是一本二本?一本和二本的区别是什么? 全球通讯
- 为什么计算机会出现乱码?计算机出现乱码的原因分析|环球快资讯
- 天天观察:索尼发布会:三月PS+二三档游戏公开:《幽灵线东京》、《神秘海域盗贼遗产》等
- 天天快消息!计算机网络最早出现在哪个年代?互联网、因特网、万维网三者的关系
- 《街头霸王6》新实机 展示嘉米等三个新角色
- 晨报:《死亡岛2》3月2日公开新实机 《真人快打12》确认于今年发布_焦点速看
- 世界微速讯:State of Play:《街头霸王6》新预告 南美热裤少女闪亮登场
- 全球快看点丨创见u盘怎么样?创见U盘价格及快速修复方法
- 当前速递!什么是基础设施建设?础设施的特点与作用
- 支付宝用zhifubao.com域名意欲何为?详情介绍-世界独家
- 【世界时快讯】lic是什么文件?lic文件怎么打开?
- 前沿热点:xbox游戏机怎么样?微软Xbox电视游戏机评测
- 马克·扎克伯格简介 全球最年轻的亿万富豪
- 环球资讯:光载毫米波无线电通信技术现状介绍 光载毫米波无线电通信技术的发展
- 什么是频谱分析仪?频谱分析仪详情介绍 全球今热点
- 全球观速讯丨二进制转八进制的两种方法
- 世界热资讯!苹果作为市场上的主流手机有哪些维修点?苹果手机维修点查询
- 网文6个最好的免费在线音乐识别器——Shazam
- 接口测试工具——SoapUI下载安装教程
- 如何制作手机上网和多台电脑上WIFI?制作虚拟路由器免费WIFI方法-快消息
- windowsserver2012配置php环境的步骤
- 当前快看:电脑屏幕录像应该怎么操作?录制屏幕方法
- 帝尔复读机怎样?帝尔复读机价格性能介绍_焦点热议
- 博士音响好不好?博士音响品牌介绍:每日头条
- 海顿燃气壁挂炉好不好?海顿燃气壁挂炉优点介绍
- 稻盛和夫为什么值得学习?《干法》精华解读 世界聚看点
- 中国现在有多少家苹果零售店?苹果零售店在中国的发展历程
- 服务器遭遇DDoS攻击时会有哪些症状?DDos攻击的基本原理及症状
- 计算机b级英语翻译 英语B级考试翻译必备常用短句
- 每日资讯:什么叫电子邮箱?注册电子邮箱的方法有哪些?
- u盘和硬盘都需要建立文件系统吗?linux系统下创建文件系统
- 不可预料的压缩文件末端解决办法是什么?解决方法步骤_热点在线
- 【Bootstrap4】列表组的创建方法
- 努比亚Z17畅享版和Z17有什么区别?性能与双摄区别在哪?:焦点精选
- 速看:如何实现一个打点计时器?javascript打点计时器
- java爬虫框架介绍:Heritrix优势劣势
- 【科研必备】初中数学符号及读法大全(收藏版)
- 《自杀小队:战胜正义联盟》4人合作游玩演示视频-全球热议
- 亚马逊雨林求生游戏《绿色地狱VR》将支持PSVR2:热资讯
- 火影20周年作品《鸣人X博人究极忍者风暴连接》公布
- 个人辞职模板格式-个人辞职模板:天天看热讯
- 热门看点:百万英里 Cruise无人驾驶汽车达成里程碑
- 支持8K!凯宠TypeC线100瓦只要29.45元
- 全国有6亿栋房屋?飙上热搜!百亿新冠自测公司暴跌99.6%,曾是美国"第一"!企业月薪4万招人去养鸡…
- 《原子之心》PC平台性能分析:多种配置下流畅运行-环球今亮点
- 联想小新黑屏死机成投诉重灾区 QQ维权群已有近千人:动态焦点
- "姐夫"要回来啦!《守望先锋》原班人马组建新工作室
- Fami通新一周销量榜 《霍格沃茨之遗》继续登顶 环球热资讯
- 拒绝美式霸凌!Xbox称10年的COD合约派对大家都能参与
- 世界视点!B社确认三上真司即将离职:感谢他的贡献
- Fami通满分神作 《428:被封锁的涩谷》Steam 27元促销
- 每日消息!明基E540智能商务投影机 让我从此爱上开会!
- 首个香港直航山东旅游团来青,点名要去老城区看看 环球头条
- 《八方旅人2》发售倒计时1天!商人小队邀您上号游戏
- 徐工晒《流浪地球2》“化缘”记录 网友:一眼诈骗 当前快播
- 三上离开后动向猜测 可能成立一家中国投资的工作室
- 尼克尔Z 400mm f/4.5 VR S荣膺DPReview读者选择最佳定焦镜头奖
- 世界信息:《最后生还者》幕后花絮:乔尔骑的马竟然是假的!
- 《龙之谷》官宣将推出回忆服 首曝内容宣传片
- 雷蛇继续推出2023款灵刃15游戏本, i7+RTX 4060版卖19999元|全球今日报
- 【天天热闻】影驰星曜DDR5 6800MHz内存开售,纯白系列再添一员
- 硬核!为防95后员工摸鱼 山东一公司办公桌旁装监控-头条焦点
- 天天最新:《霍格沃茨之遗》或将有续作?华纳想打造成长期IP
- 三上真司即将离开B社-全球讯息