Web爬虫入门
1.0示例学习:Web爬虫
public class WebCrawler {
    // 种子url
    private static String url = "http://www.cnblogs.com/";
    public static void main(String[] args) {
        ArrayList<String> list = crawler(url);
        System.out.println("Length of listOfPendingURLs: " + list.size());
    }
    /**
     *    根据种子URL抓取100个url
     */
    public static ArrayList<String> crawler(String StartingURL) {
        ArrayList<String> listOfPendingURLs = new ArrayList<String>();        //待抓取的url列表
        ArrayList<String> listOfTraversedURLs = new ArrayList<String>();    //已抓取的url列表
        listOfPendingURLs.add(StartingURL);
        while(!listOfPendingURLs.isEmpty() && listOfTraversedURLs.size() <= 100) {
            String urlString = listOfPendingURLs.remove(0);        //每次只取 待抓取url列表 的第一个地址
            if(!listOfTraversedURLs.contains(urlString)) {
                listOfTraversedURLs.add(urlString);
                System.out.println("Crawl " + urlString);        
                for(String s : getSubURLs(urlString)) {            //根据种子url遍历该页面所有url,并存入带抓取url列表
                    if(!listOfTraversedURLs.contains(s)) {
                        listOfPendingURLs.add(s);
                    }
                }
            }
        }
        return listOfPendingURLs;
    }
    /**
     * 抓取种子url页面的所有http链接,并返回ArrayList
     */
    public static ArrayList<String> getSubURLs(String urlString) {
        ArrayList<String> list = new ArrayList<String>();
        try {
            URL url = new URL(urlString);
            @SuppressWarnings("resource")
            Scanner input = new Scanner(url.openStream());
            int begain = 0;
            while(input.hasNextLine()) {
                String line = input.nextLine();
                begain = line.indexOf("http:", begain);
                while(begain > 0) {
                    int end = line.indexOf("\"", begain);
                    if(end > 0) {
                        list.add(line.substring(begain, end));
                        begain = line.indexOf("http:", end);
                    } else {
                        begain = 0;
                    }
                }
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return list;
    }
}
Web爬虫入门的更多相关文章
- Web爬虫|入门实战之糗事百科(附源码)
		coding by real mind writing by genuine heart 解析 任务背景:https://www.qiushibaike.com/hot/ 窥探网页细节:观察每一页 ... 
- Python爬虫入门一之综述
		大家好哈,最近博主在学习Python,学习期间也遇到一些问题,获得了一些经验,在此将自己的学习系统地整理下来,如果大家有兴趣学习爬虫的话,可以将这些文章作为参考,也欢迎大家一共分享学习经验. Pyth ... 
- 【网络爬虫入门02】HTTP客户端库Requests的基本原理与基础应用
		[网络爬虫入门02]HTTP客户端库Requests的基本原理与基础应用 广东职业技术学院 欧浩源 1.引言 实现网络爬虫的第一步就是要建立网络连接并向服务器或网页等网络资源发起请求.urllib是 ... 
- 【网络爬虫入门05】分布式文件存储数据库MongoDB的基本操作与爬虫应用
		[网络爬虫入门05]分布式文件存储数据库MongoDB的基本操作与爬虫应用 广东职业技术学院 欧浩源 1.引言 网络爬虫往往需要将大量的数据存储到数据库中,常用的有MySQL.MongoDB和Red ... 
- Python爬虫入门教程 37-100 云沃客项目外包网数据爬虫 scrapy
		爬前叨叨 2019年开始了,今年计划写一整年的博客呢~,第一篇博客写一下 一个外包网站的爬虫,万一你从这个外包网站弄点外快呢,呵呵哒 数据分析 官方网址为 https://www.clouderwor ... 
- Python爬虫从入门到进阶(1)之Python概述及爬虫入门
		一.Python 概述 1.计算机语言概述 (1).语言:交流的工具,沟通的媒介 (2).计算机语言:人跟计算机交流的工具 (3).Python是计算机语言的一种 2.Python编程语言 代码:人类 ... 
- Python爬虫入门之Urllib库的高级用法
		1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览 ... 
- 1.Python爬虫入门一之综述
		要学习Python爬虫,我们要学习的共有以下几点: Python基础知识 Python中urllib和urllib2库的用法 Python正则表达式 Python爬虫框架Scrapy Python爬虫 ... 
- Python爬虫入门四之Urllib库的高级用法
		1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览 ... 
随机推荐
- heartbeat在yum系发行版本的处理资料
			centos 安装包[rpm]和光盘iso文件 http://mirror.centos.org/centos/ 对应如上包的代码 http://vault.centos.org/ git.cento ... 
- 对iOS10新增Api的详细探究
			本文主要是一些对iOS新功能的探索,之前发现博客里关于iOS新功能的分析大多是过于概括,每个功能几句话,无法了解到具体的功能.所以本次的探索是基于Api层面,着重看一些具体用法所做的笔记,本来想分别画 ... 
- 软件海贼团 OnePiece (版权所有)
			最近迷上了“海贼王”这部动画片,不仅仅是因为其中的人物个个性格鲜明,剧情跌宕起伏扣人心弦,各种耍宝搞笑,还感觉到这个团队很像理想中的敏捷软件团队. 作为一直带团队的我,感觉“海贼王”这个动画片给了我很 ... 
- shell 中的与、或表达式
			今天总结一下linux shell中逻辑关机表达方式.逻辑与的表达: 1).if [ $xxx=a -a $xx=b ] 注:-a表示and的意思 2).if [ $xxx=a ] && ... 
- java设计模式- (1)单例模式
			参加校园招聘的笔试,发现公司都会考一些java设计模式,所以上网查询相关内容,总结常用的几种单例模式. 单例模式(Singleton Pattern)是 Java中最简单的设计模式之一.这种类型的设计 ... 
- Handler(二)
			1.Handler 实现Handler第二种和第三种 1.1 继承AbstractController 优点:能定制请求方式 package cn.happyl.controller; import ... 
- Life
			24小时热水.24小时无线WiFi.24小时空调:有人陪你,不孤单,不寂寞,不瞎想,不停的传播正能量 
- python 第一章学习课程
			http://www.runoob.com/python/python-dictionary.html 
- [LeetCode] First Bad Version 第一个坏版本
			You are a product manager and currently leading a team to develop a new product. Unfortunately, the ... 
- C#进阶系列——WebApi 跨域问题解决方案:CORS
			前言:上篇总结了下WebApi的接口测试工具的使用,这篇接着来看看WebAPI的另一个常见问题:跨域问题.本篇主要从实例的角度分享下CORS解决跨域问题一些细节. WebApi系列文章 C#进阶系列— ... 
