资讯专栏INFORMATION COLUMN

webmagic爬取分页列表数据

Shisui / 2214人阅读

摘要:是爬虫框架中比较简单易上手的一个。官网链接下面的例子是使用这个框架来爬取工商银行的私人理财推荐分页列表数据。页面链接为引入配置如果项目已经引入记录日志,则需要在中排除。

webmagic是java爬虫框架中比较简单易上手的一个。官网链接:http://webmagic.io/

下面的例子是使用这个框架来爬取工商银行的私人理财推荐分页列表数据。页面链接为:https://mybank.icbc.com.cn/se...$17$TJ&Area_code=0200&requestChannel=302

1.引入webmagic:maven配置


us.codecraft
webmagic-core
0.7.3


us.codecraft
webmagic-extension
0.7.3

如果项目已经引入slf4j记录日志,则需要在webmagic-extension中排除slf4j-log4j12。如下:


us.codecraft
webmagic-extension
0.7.3
    
     
         org.slf4j
         slf4j-log4j12
     
     

2.日志文件配置如下:

log4j.rootLogger=info, ServerDailyRollingFile, stdout
log4j.appender.ServerDailyRollingFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.ServerDailyRollingFile.DatePattern="."yyyy-MM-dd
log4j.appender.ServerDailyRollingFile.File=/home/myfile/log/mps.log //日志文件路径配置
log4j.appender.ServerDailyRollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.ServerDailyRollingFile.layout.ConversionPattern=%d - %m%n
log4j.appender.ServerDailyRollingFile.Append=true
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p [%c] %m%n

3.爬虫代码

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.pipeline.ConsolePipeline;
import us.codecraft.webmagic.processor.PageProcessor;
import us.codecraft.webmagic.selector.Selectable;
import java.util.ArrayList;
import java.util.List;
/**
*私行推荐理财
*/
public class PrivateRecommendFinanceSpider implements PageProcessor {
private Logger log = LoggerFactory.getLogger(PrivateRecommendFinanceSpider.class);
// 定义连接失败时,重试机制
private static Site site = Site.me().setRetryTimes(3).setSleepTime(100);
public Site getSite() {
return site;
}
@Override
public void process(Page page) {
log.info("私行推荐理财爬虫开始====");
String pageNum=page.getHtml().xpath("//*[@id=pageturn]/ul/li[3]/span[2]/b/text()").get();
int pageNumInt=Integer.parseInt(pageNum);
for (int i = 1; i < pageNumInt; i++) {
//获取下一页的链接,将当前页数拼接到url上
String nextUrl="https://mybank.icbc.com.cn/servlet/ICBCBaseReqServletNoSession?dse_operationName=per_FinanceCurProListP3NSOp&p3bank_error_backid=120103&pageFlag=0&menuLabel=10$17$TJ&Area_code=0200&requestChannel=302&nowPageNum_turn="+(i+1);
//将下一页链接添加到爬虫队列中
page.addTargetRequest(nextUrl);
}
List nodes = page.getHtml().xpath("//*[@id=datatableModel]/div").nodes(); //获取列表的条数
int length=nodes.size();
System.out.println(length);
List list = new ArrayList<>();
for (int i = 0; i < length-2; i++) {
PrivateRecommend privateRecommend = new PrivateRecommend();
//根据xpath获取对应节点的内容
privateRecommend.setProductName(page.getHtml().xpath("/html/body/div[1]/div[1]/div[3]/div["+(i+2)+"]/div[2]/div[1]/span[1]/span[1]/a/text()").get());
privateRecommend.setPerformanceBanchmark(page.getHtml().xpath("//*[@id=doublelabel1_"+i+"-content]/text()").get());
privateRecommend.setUpPurchaseAmount(page.getHtml().xpath("//*[@id=doublelabel2_"+i+"-content]/b/text()").get());
privateRecommend.setInvestmentPeriod(page.getHtml().xpath("//*[@id=doublelabel2_"+i+"-content]/b/text()").get());
privateRecommend.setRiskClass(page.getHtml().xpath("//*[@id=tt"+i+"-content]/text()").get());
privateRecommend.setRaisingPeriod(page.getHtml().xpath("/html/body/div[1]/div[1]/div[3]/div["+(i+2)+"]/div[2]/div[1]/span[2]/span/text()").get());
list.add(privateRecommend);
}
//将封装的list对象传到pipline中
page.putField("privateRecommend",list);
}
//执行main方法
public void main(String[] args){
Spider.create(new PrivateRecommendFinanceSpider()).addUrl("https://mybank.icbc.com.cn/servlet/ICBCBaseReqServletNoSession?dse_operationName=per_FinanceCurProListP3NSOp&p3bank_error_backid=120103&pageFlag=0&menuLabel=10$17$TJ&Area_code=0200&requestChannel=302")
.addPipeline(new ConsolePipeline()).run();//pipline中保存数据,此例中consolepipeline直接将内容打印到控制台。可自己定义
log.info("=====私行推荐理财爬虫执行完毕");
}

4.对象的内容

@Data
public class PrivateRecommend {

/**主键*/
private Long id;
/**
 * 名称
 */
private String productName;
/**
 *预期年化收益率
 */
private String performanceBanchmark;
/**
 *起购金额
 */
private String upPurchaseAmount;
/**
 *期限
 */
private String investmentPeriod;
/**
 * 风险等级
 */
private String riskClass;
/**
 * 最近购买开放日
 */
private String raisingPeriod;
/**
 * 更新日期
 */
private String updateTime;

}

5.可能存在的坑
a.可能会存在slf4j日志jar的冲突
b.xpath获取节点上的内容
c.获取列表下一页列表数
d.将下一页链接添加到爬虫队列中

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75937.html

相关文章

  • 优雅的使用WebMagic框架写Java爬虫

    摘要:优雅的使用框架,爬取唐诗别苑网的诗人诗歌数据同时在几种动态加载技术中对比作选择虽然差不多两年没有维护,但其本身是一个优秀的爬虫框架的实现,源码中有很多值得参考的地方,特别是对爬虫多线程的控制。 优雅的使用WebMagic框架,爬取唐诗别苑网的诗人诗歌数据 同时在几种动态加载技术(HtmlUnit、PhantomJS、Selenium、JavaScriptEngine)中对比作选择 We...

    leejan97 评论0 收藏0
  • 关于webmagic爬取Https网站报错的解决办法

    摘要:目前最新版是版本,在爬取只支持的站点会报错目前作者说会在版本发布修复错误,目前的解决办法是临时适配方式,修改中的方法,重写自己实现的,并设置到中。 目前webmagic最新版是0.7.3版本,在爬取只支持TLS1.2的https站点会报错 javax.net.ssl.SSLException: Received fatal alert: protocol_version at ...

    CKJOKER 评论0 收藏0
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作

    摘要:概述最近在做宜立方商城项目时,后台管理系统要求实现分页显示,由于项目使用了逆向生成映射文件,所以在此使用了第三方插件来实现分页这一功能,下面就如何在项目使用这一插件进行说明。使用方法添加依赖把依赖的包添加到工程中。 1.概述 最近在做宜立方商城项目时,后台管理系统要求实现分页显示,由于项目使用了Mybatis逆向生成映射文件,所以在此使用了mybatis第三方插件--PageHelp...

    TZLLOG 评论0 收藏0
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作

    摘要:概述最近在做宜立方商城项目时,后台管理系统要求实现分页显示,由于项目使用了逆向生成映射文件,所以在此使用了第三方插件来实现分页这一功能,下面就如何在项目使用这一插件进行说明。使用方法添加依赖把依赖的包添加到工程中。 1.概述 最近在做宜立方商城项目时,后台管理系统要求实现分页显示,由于项目使用了Mybatis逆向生成映射文件,所以在此使用了mybatis第三方插件--PageHelp...

    wenyiweb 评论0 收藏0
  • 【爬虫】使用java爬取mm131美女图片

    前言 最近无意间在知乎专栏看到有人使用python爬取了mm131的图片。想着自己也有过爬虫的开发经验(抱着学习的态度),故使用java也来写个小爬虫,爬虫框架用的是webmagic,传送门:https://github.com/code4craft/webmagic 实现 整个爬虫项目如下图,极其精简,其中主要实现类是Mm131Spider showImg(http://pc3dvrbm9...

    Anshiii 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<