WebMagic学习-对Page类的一个疑问

us.codecraft.webmagic.Page类中有个字段:

    private Selectable url;

很多地方都是用过page.getUrl();可是大家注意到url的类型没有?Selectable是个选择器。

其实我的理解page.getUrl();返回的时当前正在处理的页面的url,也就是这个url必然只有一个。

但是url其实是个List。那就来看一下:

PageProcessor.process(Page)方法中的page对象到底是怎么来的:

eclipse用户:选中这个方法 -> ctrl+shift+g快捷键 -> 会弹出一个Search窗口:191837_7QUw_2475326.png双击这个方法,就是这个方法调用了PageProcessor.process(Page)方法(也就是这个方法把page对象传过来的)双击进去后看到:

	protected void processRequest(Request request) {
		Page page = downloader.download(request, this); //这里,page对象是download下来的
		if (page == null) {
			sleep(site.getRetrySleepTime());
			onError(request);
			return;
		}
		// for cycle retry
		if (page.isNeedCycleRetry()) {
			extractAndAddRequests(page, true);
			sleep(site.getRetrySleepTime());
			return;
		}
		pageProcessor.process(page);
....

看HttpClientDownloader.download(Request, Task)方法中:

Page page = handleResponse(request, charset, httpResponse, task);

找到了page对象是handleResponse()方法返回值

最后看到方法中:

page.setUrl(new PlainText(request.getUrl()));

request.getUrl()返回值是String,那PlainText的构造方法是:

    public PlainText(String text) {
        this.sourceTexts = new ArrayList<String>();
        sourceTexts.add(text);
    }

也就是,把这个String类型的url放到了一个List中。而PlainText instanceof Selectable,所以返回最开始的问题,Page类中的url的类型是Selectable。

 

在最开始我说了:【其实我的理解page.getUrl();返回的时当前正在处理的页面的url,也就是这个url必然只有一个。】

就在我上一段写完的时候,发现不对:表示当前正在处理的页面的url是:Page类中有个字段:

    private Request request;

Request类中有个字段:

    private String url; //page中的request中的url才是当前处理的url地址。虽然现在还没有搞懂Page.url到底是啥

 

看page对象中的request到底是怎么来的:us.codecraft.webmagic.downloader.HttpClientDownloader.handleResponse(Request, String, HttpResponse, Task)方法中:

		page.setRequest(request);//这个request是scheduler.poll(this);返回值,也就是当前在处理的request

所以证实了Page.request.url就是当前处理页面的url

转载于:https://my.oschina.net/anxiaole/blog/756516

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值