我要爬取一個頁面,進去的第一個頁面是表格,表格里有包含進入第二個頁面的超鏈接,再進入第三個頁面。 這里我要的資料在第二個頁面和第三個頁面里。請問下這個要腫么爬取才可以?
uj5u.com熱心網友回復:
我也不會 對不起啊、、、、、、、、、、、、、、、uj5u.com熱心網友回復:
page.addTargetRequests(page.getHtml().links().all());這句就可以實作深度抓取
uj5u.com熱心網友回復:
在第一個頁面中獲取第二個頁面的url通過page.addTargetRequests(page.getHtml().links().all());添加;在第二個頁面抽取你需要的內容,同時獲取第三個頁面的url通過page.addTargetRequests(page.getHtml().links().all())添加,在第三個頁面中獲取你需要的內容。uj5u.com熱心網友回復:
可是在第三個頁面獲得的url在百度直接打開是打不開的,那應該怎么辦呢?求教uj5u.com熱心網友回復:
爬頁面主要是干嘛用的,分析資料???還是其他方向?uj5u.com熱心網友回復:
找到方法了嗎?我最近也在做這個uj5u.com熱心網友回復:
在request里面有一個extras屬性,可以設定你需要的,
public void process(Page page) {
//省略了一些代碼,主要是思路
List<String> links = = page.getHtml().links().regex(info.getUrlReg()).all();
for (String url : links) {
Request request = new Request();
request.setUrl(url);
Map<String, Object> extras = new HashMap<String, Object>();
if (startPage) {
extras.put("_level", START_DEPTH + 1);
} else {
//獲取上層頁面的深度再加一就是這個URL的深度
extras.put("_level", (Integer) page.getRequest().getExtra("_level") + 1);
}
request.setExtras(extras);
page.addTargetRequest(request);
}
}
然后在scheduler里面做限制深度的處理
public class DepthScheduler extends QueueScheduler {
private int levelLimit = 3;
public DepthScheduler() {
}
public DepthScheduler(int levelLimit) {
this.levelLimit = levelLimit;
}
@Override
public void push(Request request, us.codecraft.webmagic.Task task) {
if (request.getExtra("_level") == null || ((Integer) request.getExtra("_level")) <= levelLimit) {
super.push(request, task);
}
}
}
uj5u.com熱心網友回復:
有點小問題不要介意啊,思路是這樣的。uj5u.com熱心網友回復:
好像發錯了,我的代碼是用來限制爬取深度的。。。。。uj5u.com熱心網友回復:
你好,請問下你里面的startPage是什么
uj5u.com熱心網友回復:
請問這個問題有木有解決,請賜教uj5u.com熱心網友回復:
這個問題解決了嗎,求解。uj5u.com熱心網友回復:
page加入o目標url后,為啥不再爬取了?uj5u.com熱心網友回復:
page加入目標url后不再爬取了,怎么回事呢?uj5u.com熱心網友回復:
抓頭了一下午,終于解決!//把第二頁的資料,放入extra【多條的話,用setExtras】,攜帶進第三頁的請求中
page.getRequest().putExtra("beforeContent", content);
//引數必須為:page.getRequest().setUrl(next),否則進不了第三頁
page.addTargetRequest(page.getRequest().setUrl(next));
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/85693.html
標籤:非技術區
