PageInfo.java是一个页面对象。它抽象了页面的主要元素,并且封装了取得那些元素的方法。
public URL getUrl() { return(url); }\\取得页面的url
public URL getParentUrl() { return(parentUrl); }\\
public String getTitle() { return(title); }
public URL[] getLinks() { return(links); }
public URL[] getImages() { return(images); }
public String getContentType() { return(contentType); }
public boolean isValid() { return(valid); }
public int getResponseCode() { return responseCode; }
中间有个最核心的方法就是
public void extract(Reader reader) throws IOException
{
// Note: contentLength of -1 means UNKNOWN
if (reader == null || url == null ||
responseCode != HttpURLConnection.HTTP_OK ||
contentLength == 0 || contentType.equalsIgnoreCase(HTML) == false) {
valid = false;
return;
}
WebPageXtractor x = new WebPageXtractor();
try { x.parse(reader); }
catch(EOFException e) {
valid = false;
return;
}
catch(SocketTimeoutException e) {
valid = false;
throw(e);
}
catch(IOException e) {
valid = false;
return;
}
ArrayList rawlinks = x.getLinks();
ArrayList rawimages = x.getImages();
// Get web page title (1st title if more than one!)
ArrayList rawtitle = x.getTitle();
if (rawtitle.isEmpty()) title = null;
else title = new String((String)rawtitle.get(0));
// Get links
int numelem = rawlinks.size();
if (numelem == 0) links = null;
else {
ArrayList t = new ArrayList();
for (int i=0; i String slink = (String)rawlinks.get(i);
try {
URL link = new URL(url,slink);
t.add(link);
}
catch(MalformedURLException e) { /* Ignore */ }
}
if (t.isEmpty()) links = null;
else links = (URL[])t.toArray(dummy);
}
// Get images
numelem = rawimages.size();
if (numelem == 0) images = null;
else {
ArrayList t = new ArrayList();
for (int i=0; i String simage = (String)rawimages.get(i);
try {
URL image = new URL(url,simage);
t.add(image);
}
catch(MalformedURLException e) { }
}
if (t.isEmpty()) images = null;
else images = (URL[])t.toArray(dummy);
}
// Set valid flag
valid = true;
}
这个方法主要是调用了WebPageXtractor来处理web页面。
然后把页面的各个属性的值都返回。
WebPageXtractor是继承了SimpleHTMLParser的方法,所以对页面元素进行分解是SimpleHTMLParser实现的
重点分析一下SimpleHTMLParser的一些方法。
分享到:
相关推荐
一个基于Java的web spider框架.它包含一个简单的HTML剖析器能够分析包含HTML内容的输入流.通过实现Arachnid的子类就能够开发一个简单的Web spiders并能够在Web站上的每个页面被解析之后增加几行代码调用。
《Arachnid源码解析与网络实验探索》 在信息技术领域,开源软件和共享资源扮演着至关重要的角色,它们促进了技术的快速发展和创新。今天,我们将深入探讨一个名为"Arachnid"的项目,它是网络实验的重要参考资料。...
**Arachnid:一个用Java实现的Web爬虫应用** 蛛形纲,或者在这个语境中,是指一种软件工具,即Arachnid,它是一个基于Java的Web爬虫应用程序。Web爬虫,也称为网络抓取器或网络爬行器,是一种自动浏览互联网并收集...
2. **推荐系统**:基于用户行为和物品关联的推荐算法,图形数据库和 Arachnid4Laravel 可以提供高效的解决方案。 3. **知识图谱**:构建和维护知识图谱,如实体关系、概念层次结构,图形数据库和 Arachnid4Laravel ...
《PyPI官网下载:arachnid-0.1.6.tar.gz——深入解析Python库与分布式系统》 PyPI(Python Package Index)是Python开发者的重要资源库,它提供了丰富的Python库供用户下载和使用。在本次讨论中,我们关注的是一个...
Arachnid:是一个基于Java的web spider框架.它包含一个简单的HTML剖析器能够分析包含HTML内容的输入流.通过实现Arachnid的子类就能够开发一个简单的Web spiders并能够在Web站上的每个页面被解析之后增加几行代码调用...
Spiders 管理网络,Arachnid 管理 Neo4J Graphs。 这个库很大程度上基于 Louis-Philippe Huberdeau 在他的所做的出色工作。 主要区别在于,此 OGM 允许您定义关系对象以及节点对象,从而使您可以非常轻松地将属性...
**Arachnid: 网络爬虫与Reddit机器人** `Arachnid`是一个用Python编写的网络爬虫工具,其名称来源于生物学中的蛛形纲动物,象征着它在网络世界中像蜘蛛一样进行数据抓取。它专为高效地抓取和处理网页信息而设计,...
这个引擎的名字可能是来源于蜘蛛(Arachnid)的概念,因为蜘蛛在互联网中象征着搜索引擎爬虫,而CMS则与网页内容的抓取和管理相关。作为一个开源项目,它的源代码可供公众查看、使用和改进,这鼓励了社区协作和持续...
2. **网络抓取(Bot/Crawler)**:网络抓取是自动遍历互联网并收集信息的过程,通常用于数据挖掘、搜索引擎索引或网站分析。Arachnid作为网络爬虫框架,允许用户编写规则来指定如何导航网页,获取所需的数据,并处理...
7. **Arachnid**: 一个基于Java的Web蜘蛛框架,提供了简单的HTML解析器,用户可以通过实现其子类轻松创建自己的Web爬虫。 8. **LARM**: 针对Jakarta Lucene的搜索解决方案,LARM能为文件、数据库和Web站点建立索引...
乔希·洛克哈特(Josh Lockhart)为Composer和Packagist修改了原始博客文章的代码(获得许可),并更新了语法以符合PSR-2编码标准。 如何安装 您可以使用安装此库。 将其放入您的composer.json清单文件中: { ...
#### 2. URL管理策略 - **跨域访问控制**:`setWalkToOtherHosts(boolean walk)`决定是否允许爬虫访问其他域名下的页面,默认为不允许。 - **URL白名单配置**:可以通过`setAllowedURLs(Vector<String> allowed)`来...
评论包括Arachnid Cricket Pro系列,dartslive 200S,sunlight blast 6000等。 从Dart,我们只审查最好的作品,包括bottelsen系列,蜘蛛,黑寡妇,KODart等等。 一切都可以轻松满足您的需求。 如果您对自己的Dart...
为 Kickstarter 项目 (tri.gg/kickstarter2) 创建了初始原型,并完成了大量额外工作以将产品推向市场。 Triggertrap 未能成功将 Ada 投入生产,但正在发布在 GPLv3 开源许可下完成的工作。 有关在哪里可以找到 Ada ...
2.继续播放视频。 Este软件esta许可在GNU GPL v3上运行,您可以从一个整体上了解到。 GitHub仓库:https://github.com/arachnid92/U-Cursos-Plus Autor:ManuelOlguín(aka Arachnid92),Intutierante deIngenier...
基于https://stackapps.com/questions/8287/2019-april-fools-day-retro-theme源代码:https://github.com/Alexrgs/Retro_StackOverflow特别感谢/感谢https://github.com / a-stone-arachnid / Time-Travel-Mode ...
git clone https://github.com/arachnid/sggc.git npm install 用法 在contracts目录中实施一个或多个contracts 。 用truffle test进行相应的truffle test ; 例如,如果您实现了排序,请运行: truffle test test...