JAVA编写网络爬虫笔记(第一部分:URL链表的结构)
2015-05-25 19:41
274 查看
一开始拿到写爬虫的任务还是挺迷茫的,没什么头绪,甚至还不知道什么是爬虫,要怎样写。于是,在网上找到了《自己动手写爬虫》的这本书,花了几天的时间去看,略有小成就。
一、我们要理解一下一个简单爬虫实现的原理:通过URL下载网页代码并解析找到我们所需要的内容,并通过这网页上的链接访问其他URL,重复操作。在这里就要说一下URL是什么:其实就是我们要访问的网页地址(存储在服务器上的一个文件)。
二、我们分析完原理后,就要设计这个项目的代码结构了。首先,我们要有一个类来输入URL然后测试,这个类我写成了MyCrawler类。第二,既然是要下载网页的代码,就要有一个DownloadFile类,功能是给它一个URL,把这个URL的网页源代码下载到本地。第三,我们要访问这个网页的URL,就要先获取这个网站上的所有URL,存放到一个未访问链接的表中,并且访问其中的URL后,就把已访问的URL放到已访问链表中,下次访问URL的时候先判断这个URL是否在未访问链表中,是就访问,否就跳过并进行下一次访问,于是就设计了两个这样的表:Queue(一个链表,里面有入列,出列,判断等等方法)和LinkQueue()(里面有visitedurl和unvisitedurl两个成员变量和入列,出列,判断等方法)
三、设计好代码结构后,就到代码的具体实现了,第一部分我就把链表的结构详细展示给大家看
Queue.java (把URL保存到链表中主要的目的是方便增加,删除,判断)
LinkQueue.java(把visitedUrl声明为HashSet结构是因为,已访问的url列表中不存在两个相同的URL)
关于怎样通过访问URL去下载网页到本地,请留意第二部分。
一、我们要理解一下一个简单爬虫实现的原理:通过URL下载网页代码并解析找到我们所需要的内容,并通过这网页上的链接访问其他URL,重复操作。在这里就要说一下URL是什么:其实就是我们要访问的网页地址(存储在服务器上的一个文件)。
二、我们分析完原理后,就要设计这个项目的代码结构了。首先,我们要有一个类来输入URL然后测试,这个类我写成了MyCrawler类。第二,既然是要下载网页的代码,就要有一个DownloadFile类,功能是给它一个URL,把这个URL的网页源代码下载到本地。第三,我们要访问这个网页的URL,就要先获取这个网站上的所有URL,存放到一个未访问链接的表中,并且访问其中的URL后,就把已访问的URL放到已访问链表中,下次访问URL的时候先判断这个URL是否在未访问链表中,是就访问,否就跳过并进行下一次访问,于是就设计了两个这样的表:Queue(一个链表,里面有入列,出列,判断等等方法)和LinkQueue()(里面有visitedurl和unvisitedurl两个成员变量和入列,出列,判断等方法)
三、设计好代码结构后,就到代码的具体实现了,第一部分我就把链表的结构详细展示给大家看
Queue.java (把URL保存到链表中主要的目的是方便增加,删除,判断)
import java.util.LinkedList; public class Queue { /** * 队列,保存将要访问的URL * */ //使用链表实现队列 private LinkedList queue =new LinkedList(); //入队列 public void enQueue(Object t){ queue.addLast(t); } //出队列 public Object deQueue(){ return queue.removeFirst(); } //判断队列是否为空 public boolean isQueueEmpty(){ return queue.isEmpty(); } //判断队列是否包含t public boolean contians(Object t){ return queue.contains(t); } public boolean empty(){ return queue.isEmpty(); } }
LinkQueue.java(把visitedUrl声明为HashSet结构是因为,已访问的url列表中不存在两个相同的URL)
import java.util.HashSet; import java.util.Set; public class LinkQueue { //已访问的url集合 public static Set visitedUrl=new HashSet(); //待访问的url集合 public static Queue unVisitedUrl=new Queue(); //获得URL队列 public static Queue getUnVisitedUrl(){ return unVisitedUrl; } //添加到访问过的URL队列中 public static void addVisitedUrl(String url){ visitedUrl.add(url); } //移除访问过的url public static void removeVisitedUrl(String url){ visitedUrl.remove(url); } //未访问的URL出队列 public static Object unVisitedUrlDeQueue(){ return unVisitedUrl.deQueue(); } //保证每个URL只被访问一次 public static void addUnvisitedUrl(String url){ if(url!=null &&!visitedUrl.contains(url)&& !unVisitedUrl.contians(url)){ unVisitedUrl.enQueue(url); } } //获得已经访问 的URL数目 public static int getVisitedUrlNum(){ return visitedUrl.size(); } //判断未访问的URL队列中是否为空 public static boolean unVisitedUrlsEmpty(){ return unVisitedUrl.empty();} }
关于怎样通过访问URL去下载网页到本地,请留意第二部分。
相关文章推荐
- JAVA编写网络爬虫笔记(第二部分:httpClient下载页面)
- Java编写网络爬虫笔记(第三部分:Jsoup的强大)
- 19. JAVA 网络编程 Part 1 (IP与InetAddress类、URL与URLConnection类、URLEncoder与URLDecoder类、TCP&UDP)---- 学习笔记
- 网络编程_InetAddress_InetSocketAddress_URL_爬虫原理JAVA185-186
- java 网络编程 URL类 笔记
- Java笔记(9)-网络编程、URL、InetAddress、套接字、Socket、ServerSocket、多线程、UDP、广播数据包、远程调用
- 网络编程笔记二:一个java爬虫的实现(静态页面)
- Java编写网络爬虫
- Java网络学习笔记1:用(Server)Socket编写简单的客户/服务器程序
- java网络爬虫开发笔记(2)
- 用 Python 编写网络爬虫 笔记
- 用 Python 编写网络爬虫 笔记
- 用 Python 编写网络爬虫 笔记
- 用 Python 编写网络爬虫 笔记
- 【 网络爬虫】java 使用Socket, HttpUrlConnection方式抓取数据
- Java学习笔记之网络编程基础-通过URL获取HTML页面
- Java学习笔记之网络编程基础-通过URL获取网络图片
- Java 学习笔记(网络编程 之 URL)
- [Python]网络爬虫1:抓取网页的含义和URL基本构成 笔记
- Java笔记6 网络编程<2>TCP、自定义图形界面浏览器、URL