WebMagic学习-对Page类的一个疑问
2016-10-10 00:00
120 查看
us.codecraft.webmagic.Page类中有个字段:
很多地方都是用过page.getUrl();可是大家注意到url的类型没有?Selectable是个选择器。
其实我的理解page.getUrl();返回的时当前正在处理的页面的url,也就是这个url必然只有一个。
但是url其实是个List。那就来看一下:
PageProcessor.process(Page)方法中的page对象到底是怎么来的:
eclipse用户:选中这个方法 -> ctrl+shift+g快捷键 -> 会弹出一个Search窗口:
双击这个方法,就是这个方法调用了PageProcessor.process(Page)方法(也就是这个方法把page对象传过来的)双击进去后看到:
看HttpClientDownloader.download(Request, Task)方法中:
找到了page对象是handleResponse()方法返回值
最后看到方法中:
request.getUrl()返回值是String,那PlainText的构造方法是:
也就是,把这个String类型的url放到了一个List中。而PlainText instanceof Selectable,所以返回最开始的问题,Page类中的url的类型是Selectable。
在最开始我说了:【其实我的理解page.getUrl();返回的时当前正在处理的页面的url,也就是这个url必然只有一个。】
就在我上一段写完的时候,发现不对:表示当前正在处理的页面的url是:Page类中有个字段:
Request类中有个字段:
看page对象中的request到底是怎么来的:us.codecraft.webmagic.downloader.HttpClientDownloader.handleResponse(Request, String, HttpResponse, Task)方法中:
所以证实了Page.request.url就是当前处理页面的url
private Selectable url;
很多地方都是用过page.getUrl();可是大家注意到url的类型没有?Selectable是个选择器。
其实我的理解page.getUrl();返回的时当前正在处理的页面的url,也就是这个url必然只有一个。
但是url其实是个List。那就来看一下:
PageProcessor.process(Page)方法中的page对象到底是怎么来的:
eclipse用户:选中这个方法 -> ctrl+shift+g快捷键 -> 会弹出一个Search窗口:
双击这个方法,就是这个方法调用了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
相关文章推荐
- 今天学习asp.net mvc的过程中出现了一点问题,是有关浏览器的,一个疑问?
- 答读者问(24):一个大二学生有关数据结构学习的疑问及答复
- 答读者问(16):一个研二学生有关论文和学习的相关疑问
- 答读者问(20):一个在读研究生有关在校学习的相关疑问
- 答读者问(22):一个在校学生有关持续学习的疑问及答复
- 答读者问(25):一个大三学生有关专业学习的相关疑问及答复
- 答读者问(22):一个在校学生有关持续学习的疑问及答复
- 答读者问(23):一个研三学生有关工作之前的学习的疑问及答复
- 答读者问(16):一个研二学生有关论文和学习的相关疑问
- tensorflow学习笔记四——实现一个CNN网络
- [sql server] 问题总结17---一个项目涉及到的50个Sql语句(爱新觉罗.毓华整理版)(很值得学习)
- Razor引擎学习:RenderBody,RenderPage和RenderSection
- Greenplum学习10--添加节点gpexpand ①(在每台segment加入一个节点)(生成节点配置文件)
- scrapy源码学习 - 启动一个crawl命令
- 推荐一个Arduino学习模拟器: 123D Circuites
- LeJOS学习(9):一个整合传感器与马达的简单例子
- OpenGL学习脚印: 绘制一个三角形
- WF (Windows Workflow Foundation) 工作流学习(二)一个Asp.Net 与 顺序工作流 结合的例子
- 学习是怎样的一个过程??
- salesforce零基础学习(八十四)配置篇: 自定义你的home page layout