使用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();
}
}