webMagic入门案例,启动流程,及从页面中获取元素,并放到Page对象中,并成功拿出

摘要:
此示例用于:1)首次成功配置,以了解软件操作机制;2) 通过三种方式从页面获取元素:jsoop、xpath、css3)page.putField(“subject”,“尝试保存结果项的内容,并从页面获取值”);4) 第页。getResultItems()。get(“subject”)从结果集中获取数据5)Listlinks=page。getHtml()。links()。all();全部删除

本例作用:

1)首次成功配置,了解软件运行机制
2)从页面中获取元素三种方式 jsoup,xpath,css
3) page.putField("subject","尝试存入结果项的内容,可从页面中获取值");
4)page.getResultItems().get("subject") 从结果集中拿出数据
5)List<String> links =page.getHtml().links().all(); 取出所有超链接
6)通过正则表达式找出结果集,放到到page中,并取出打印foreach()

 //找出所有链接下详细招聘格式网址 http://sqrcw.com/zhaopin/job_233460.html
List<String> linkDetails =page.getHtml().links().regex("(^http://sqrcw.com\/zhaopin\/job_\d*\.html)").all();

        page.putField("linkDetails",linkDetails); //放入到Page对象中
        List<ResultItems> linkDetails_inPage = page.getResultItems().get("linkDetails");

 完整第一天学习代码:

package com.ibaiqi.study;


import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.ResultItems;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.pipeline.JsonFilePipeline;
import us.codecraft.webmagic.processor.PageProcessor;
import us.codecraft.webmagic.selector.Selectable;
import java.util.List;
import java.util.Map;

/**
 * 快速入门,了解webMagic启动流程,及从页面中选择元素
 * 同时以www.sqrcw.com获取详细招聘信息
 */
public class Sqrcw_comProcessor implements PageProcessor {
    Site site=Site.me()
            .addCookie("userName2","zhangdaxu")
            .setRetryTimes(3).setSleepTime(100).setTimeOut(20000);

    @Override
    public void process(Page page) {


        System.out.println(site);
        System.out.println("开始采集"+page.getUrl());
     System.out.println("开始采集超链接"+page.getHtml().css(".s1 a"));
        //尝试向结果项(采集存入项)中写入数据
        page.putField("subject","尝试存入结果项的内容");
        //测试从结果项中拿出数据
        System.out.println("取结果项值:"+page.getResultItems().get("subject"));
     
        page.putField("职位",page.getHtml().css(".s1 a"));
        //得到结果项,返回ResultItems
        System.out.println(""+page.getResultItems());
        System.out.println(page.getResultItems().get("subject"));
        //返回json的结果为json
        System.out.println(page.getJson());
        //获得当前页面超链接
        System.out.println("page.getUrl()");
        System.out.println(page.getUrl().all());
        System.out.println("selectAble() 从站点中查找部份内容");
        Selectable selectable=page.getHtml();
        System.out.println(selectable.$("#main1"));
        String url = page.getRequest().getUrl();
        System.out.println("url"+url);

        Map<String, String> cookies = page.getRequest().getCookies();
//        System.out.println("cookies"+cookies);
//        System.out.println(page.getCharset());
//        System.out.println(site.getCookies());
//        System.out.println(page.getStatusCode());
        System.out.println("得到起链接总数:"+page.getHtml().links().all().size());
        System.out.println("得到所有超链接:");
       List<String> links =page.getHtml().links().all();
       int i=0;
        for (String link:links ) {
            i++;
            System.out.println(i+"条:"+link);
        }
        System.out.println("正则表达式,找出招聘详细页面");
        //找出所有链接下详细招聘格式网址 http://sqrcw.com/zhaopin/job_233460.html
        List<String> linkDetails =page.getHtml().links().regex("(^http://sqrcw.com\/zhaopin\/job_\d*\.html)").all();
        for (String linkDetail:
                linkDetails) {
            System.out.println(linkDetail);
        }
        System.out.println("详细页面总共:"+linkDetails.size());
        //放到page对象中,并取出,目的是为以后放进pipeline对象中,做持久化操作

        page.putField("linkDetails",linkDetails); //放入到Page对象中
        List<ResultItems> linkDetails_inPage = page.getResultItems().get("linkDetails");

        System.out.println("page对象中取出的数据");
        for (Integer j=0 ;j<linkDetails_inPage.size();j++){
            System.out.println(linkDetails_inPage.get(j));
        }

    }

    @Override
    public Site getSite() {
        return site;
    }

    public static void main(String[] args) {
        System.out.println("开始采集001");
        //本类是实现 pageProcessor
        PageProcessor pageProcessor = new Sqrcw_comProcessor();
        //从才网查找数据详细页面测试
        Spider.create(pageProcessor).addUrl("http://sqrcw.com/job/")
                .addPipeline(new JsonFilePipeline("D:\data\webmagic"))
                .run();
        System.out.println("采集结束0001");

    }
}

免责声明:文章转载自《webMagic入门案例,启动流程,及从页面中获取元素,并放到Page对象中,并成功拿出》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇那些H5用到的技术(3)——屏幕场景滑动Repeater控件中点击按钮后获取某一行的数据!下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用mob提供的接口 查询IP对应的省市区信息(json对象转java对象)

登录地址:http://api.mob.com 1、写一个发送请求的工具类 2、定义一个接受返回值的类 3、发送请求 ---------这里是发送请求的工具类------------------ package com.haochedai.util;import com.sun.org.apache.xml.internal.utils.URI;impor...

Redis 中 byte格式 写入、取出

实体类: package com.nf.redisDemo1.entity; import java.io.Serializable; public class News implements Serializable { private long id; private String title; private Str...

JAVA中Session

会话状态的维持是开发Web应用所必须面对的问题,有多种方法可以来解决这个问题,如使用Cookies,hidden类型的表单域,或直接把状态信息加到URL中等,还有Servlet本身提供了一个HttpSession接口来支持会话状态的维持,在这里我们主要介绍基于这个接口的会话状态的管理。   Session的发明是为了填补HTTP协议的局限。请注意HTTP协...

Python Flask获取iOS的UDID

测试iOS app时候,我们可以安装以下4种类型的包 : AdHoc                 -- 一般为正式环境验证AppStore             -- 上传AppStore,只有appstore审核通过发布出来后才能安装Development       -- 一般为测试环境验证Enterprise            -- 企业证...

EF core的原生SQL查询以及用EF core进行分页查询遇到的问题

在用.net core进行数据库访问,需要处理一些比较复杂的查询,就不得不用原生的SQL查询了,然而EF Core 和EF6 的原生sql查询存在很大的差异。 在EF6中我们用SqlQuery和ExecuteSqlCommand进行sql语句的执行,而在EF Core中我们则使用FromSql和ExecuteSqlCommand 一.ExecuteSqlC...

springboot实现redis的分布式锁

文章目录 1.redis的应用场景 2.redis的分布式锁 3.通过redisson框架实现redis分布式锁 1.redis的应用场景 商品秒杀 点赞等 现在有一个减少商品的场景,我们很容易能写出其代码 @Controller @ResponseBody public class Test { @Autowired priv...