webmagic 页面深度爬取?

aligu528 2016-05-16 03:06:57
我要爬取一个页面,进去的第一个页面是表格,表格里有包含进入第二个页面的超链接,再进入第三个页面。 这里我要的数据在第二个页面和第三个页面里。请问下这个要肿么爬取才可以?
...全文
6679 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhjh0216 2020-03-06
  • 打赏
  • 举报
回复
抓头了一下午,终于解决! //把第二页的数据,放入extra【多条的话,用setExtras】,携带进第三页的请求中 page.getRequest().putExtra("beforeContent", content); //参数必须为:page.getRequest().setUrl(next),否则进不了第三页 page.addTargetRequest(page.getRequest().setUrl(next));
bieheng5095 2019-04-22
  • 打赏
  • 举报
回复
page加入目标url后不再爬取了,怎么回事呢?
bieheng5095 2019-04-22
  • 打赏
  • 举报
回复
page加入o目标url后,为啥不再爬取了?
j251013371 2018-01-10
  • 打赏
  • 举报
回复
这个问题解决了吗,求解。
qq_22859579 2017-12-09
  • 打赏
  • 举报
回复
请问这个问题有木有解决,请赐教
qq_31774241 2017-06-12
  • 打赏
  • 举报
回复
引用 7 楼 a422417681 的回复:
在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);
        }
    }

}
你好,请问下你里面的startPage是什么
a422417681 2017-03-09
  • 打赏
  • 举报
回复
好像发错了,我的代码是用来限制爬取深度的。。。。。
a422417681 2017-03-09
  • 打赏
  • 举报
回复
有点小问题不要介意啊,思路是这样的。
a422417681 2017-03-09
  • 打赏
  • 举报
回复
在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);
        }
    }

}
ai31354907 2017-01-18
  • 打赏
  • 举报
回复
找到方法了吗?我最近也在做这个
tianjiaowushuang 2016-12-20
  • 打赏
  • 举报
回复
爬页面主要是干嘛用的,分析数据???还是其他方向?
jxx4903049 2016-12-20
  • 打赏
  • 举报
回复
可是在第三个页面获得的url在百度直接打开是打不开的,那应该怎么办呢?求教
淬心石 2016-06-28
  • 打赏
  • 举报
回复
在第一个页面中获取第二个页面的url通过page.addTargetRequests(page.getHtml().links().all());添加;在第二个页面抽取你需要的内容,同时获取第三个页面的url通过page.addTargetRequests(page.getHtml().links().all())添加,在第三个页面中获取你需要的内容。
让我摆渡吧 2016-06-02
  • 打赏
  • 举报
回复
page.addTargetRequests(page.getHtml().links().all()); 这句就可以实现深度抓取
weikeli19 2016-06-01
  • 打赏
  • 举报
回复
我也不会 对不起啊、、、、、、、、、、、、、、、

2,100

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧