使用Webmagic爬蟲實現的簽名檔一鍵生成 實現原理 這裡爬取的網址是http://jiqie.zhenbi.com/c/ 然後獲取到裡面提交數據,提交地址,在對這些數據進行Post提交 解析html標簽獲得圖片地址並輸出到控制台 不會使用Webmagic爬蟲框架的 自行百度配置 本文主要是學習P ...
使用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();
}
}