ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

签名图片一键生成 使用Webmagic爬虫实现

2020-01-11 17:03:13  阅读:239  来源: 互联网

标签:map getHtml 一键 爬虫 put import webmagic page Webmagic


使用Webmagic爬虫实现的签名档一键生成

实现原理

这里爬取的网址是http://jiqie.zhenbi.com/c/
然后获取到里面提交数据,提交地址,在对这些数据进行Post提交
解析html标签获得图片地址并输出到控制台

不会使用Webmagic爬虫框架的 自行百度配置
本文主要是学习Post提交

下面请看代码实现


import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Request;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.model.HttpRequestBody;
import us.codecraft.webmagic.processor.PageProcessor;
import us.codecraft.webmagic.utils.HttpConstant;

import java.util.HashMap;

import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PostDemo implements PageProcessor {
    Site site = Site.me().setRetryTimes(3).setTimeOut(1500);
    @Override
    public void process(Page page) {
        Random r = new Random();

        //生成的文字
        String text = "快乐的小蜘蛛";

        //第一次请求:获取所有类型
        if ("http://jiqie.zhenbi.com/c/".equals(page.getUrl().toString())){



            //解析a标签
            //<a href="34.htm">彩色文字版本墨人动态签名档在线制作</a>

            List<String> list = page.getHtml().$("a","href").all();
            List<String> listtext = page.getHtml().$("a","text").all();

            // 创建 Pattern 对象 匹配数字
            Pattern r = Pattern.compile("[0-9]+");

            // 现在创建 matcher 对象
            Matcher m;
            Request req;
            for (int i =0;i<list.size();i++){
                m = r.matcher(list.get(i));
                if (!m.find())continue;
                req = new Request();
                req.setUrl("http://jiqie.zhenbi.com/c/"+ m.group()+".htm");
                req.putExtra("mindex",m.group());
                req.putExtra("name",listtext.get(i));
                page.addTargetRequest(req);
            }
            return;

        //第二次请求:获取数据参数以及Post提交地址
        }else if(page.getUrl().toString().endsWith(".htm")){
            //是否有id :show
            if (!page.getHtml().$("#show").match())return;

            Request request =page.getRequest();
            request.setMethod(HttpConstant.Method.POST);

            //zhenbi('re2.php','0');
            String index = page.getHtml().$("#up","onclick").regex("\\w+\\.").toString().replace(".","");
            System.out.println(index);

            request.setUrl("http://jiqie.zhenbi.com/c/"+index+".php");

            Map<String,Object> map = new HashMap<>();

            /*   提交数据

            id  我是ZHT0301 我为自己代言
            idi jiqie
            id1 20
            id2 16
            id3 26
            id4
            id5 #624475
            id6
             */

            //获取参数

            map.put("id",text);
            map.put("idi","jiqie");

            map.put("id1",page.getHtml()
                    .$("#id1").xpath("//select/option[@selected='selected']")
                    .$("option","value")
                    .toString().replace("null",""));

            map.put("id2",page.getHtml()
                    .$("#id2").xpath("//select/option[@selected='selected']")
                    .$("option","value")
                    .toString().replace("null",""));

            map.put("id3",page.getHtml().$("#id3","value"));
            map.put("id4",page.getHtml().$("#id4","value"));
            map.put("id5",page.getHtml().$("#id5","value"));
            map.put("id6",page.getHtml().$("#id6","value"));


            System.out.println(map);
            request.setRequestBody(HttpRequestBody.form(map,"utf-8"));
            page.addTargetRequest(request);
            try {
                //随缘冷静,冲动是魔鬼
                Thread.sleep(r.nextInt(500)+100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        //第三次请求:获取图片的地址
        }else{
            page.putField("id",page.getRequest().getExtra("mindex"));
            page.putField("name",page.getRequest().getExtra("name"));
            page.putField("img_src",page.getHtml().$("img","src"));
        }
    }

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


    public static void main(String[] args) {

        Spider.create(new PostDemo())
                .addUrl("http://jiqie.zhenbi.com/c/")
                .thread(1)
                .run();
    }
}

标签:map,getHtml,一键,爬虫,put,import,webmagic,page,Webmagic
来源: https://www.cnblogs.com/xiaoshuai123/p/12180399.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有