签名图片一键批量生成 使用Java的Webmagic爬虫实…
2020-01-11 16:04:43来源:博客园 阅读 ()
签名图片一键批量生成 使用Java的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"));
map.put("id2",page.getHtml()
.$("#id2").xpath("//select/option[@selected='selected']")
.$("option","value"));
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();
}
}
原文链接:https://www.cnblogs.com/xiaoshuai123/p/12180399.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:数组
- 怎么用Java 高效提取、替换、删除PDF文档中的图片 2020-06-09
- HWPFDocument读取doc,wps文档(含图片读取) 2020-05-24
- 使用阿里云 OSS 存储、访问图片(Java) 2020-04-29
- FastDFS搭建图片服务器 2020-04-16
- Java 给 PowerPoint 文档添加背景颜色和背景图片 2020-04-14
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash