[01] 网络爬虫的基本原理


1、什么是网络爬虫

爬虫是“模拟用户在浏览器或某个应用上的操作,把操作的过程实现自动化程序”,那什么是网络爬虫呢?即模拟浏览器行为,通过指定url,直接返回给用户所需要的数据,而不需要人为操纵浏览器获取

我们使用浏览器访问网页大概发生了什么?
  • 查找域名对应的IP地址
  • 向IP对应的服务器发送请求
  • 服务器响应请求,发回网页内容
  • 浏览器解析网页内容
 
网络爬虫,就是要模拟上述行为。

2、最简单的爬虫:你好百度

既然知道了原理,那么我们试着来把百度的网页内容抓取下来,无非就是:
  • 模拟url连接
  • 获取响应的输入流
  • 把输入流的内容输出到本地

public class Test {  
    public static void main(String[] args) {
        try {
            URL url = new URL("http://www.baidu.com");
            URLConnection connection = url.openConnection();
            //建立连接
            connection.connect();
            //获取输入流
            InputStream in = connection.getInputStream();
            //输出内容
            OutputStream out = new FileOutputStream(new File("C:/Users/Dulk/Desktop/baidu.txt"));
            byte[] temp = new byte[1024];
            int size = -1;
            while ((size = in.read(temp)) != -1) {
                out.write(temp, 0, size);
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

瞧瞧本地多了什么?一个baidu.txt文件,打开看看:
 
再把后缀txt改为html试试:
 

3、再听我叨叨

上面的例子写了一个最简单不过的爬虫,爬取了百度首页的网页内容。爬虫有什么作用?举个简单的例子,你看到某个帖子里有好多好多美女图片,但是帖子有上百页,手动保存图片估计得累得半死,有爬虫就so easy。再者,你想租个房子,要离地铁近,要套一,价格要便宜,网上一家一家找?有爬虫,去几大网站上把租房信息爬下来,再写个算法进行筛选,找到心仪的租房so easy。当然,爬虫生态较好的还是python了,爬下来的内容也是做大数据分析不可或缺的。

3.1 爬虫的基本流程

在复杂的需求下,就不会像上例那么简单的爬虫了,它的工作流程有了一些变化,主要是因为URL需要变化
  • 首先选取一部分精心挑选的种子URL
  • 将种子URL加入任务队列
  • 从队列取出URL,解析DNS得到IP,并将对应的网页下载下来,并将这些URL放进已抓取URL队列
  • 分析已抓取URL队列中的URL,分析其中的其他URL,并放入待抓取队列,从而循环
  • 解析下载下来的网页,将需要的数据解析出来
  • 数据持久化,保存至数据库中


3.2 爬虫的抓取策略


这里只列举两种常见的抓取策略:

深度优先策略
  • 指爬虫从某个URL开始,一个链接接着一个链接爬取下去,直到处理完某个链接所在的所有线路,才切换到其他线路
  • 抓取顺序(如上图例):A -> B -> C -> D -> E -> F -> G -> H -> I -> J

广度优先策略
  • 指将新下载网页中发现的链接,直接插入到待抓取队列的末尾
  • 即先抓取起始网页中链接的所有网页,然后再选择其中的一个链接网页,继续抓取该网页链接中所有网页
  • 抓取顺序(如上图例):A -> B -> E -> G -> H -> I -> C -> F -> J -> D

3.3 其他还没有提到问题

还有其他很多要点这里没有详细进行阐述,比如:
  • 如果网页需要登陆,设置Cookie的问题
  • 如何通过抓包分析请求
  • 拥有反爬虫机制的网站如何进行伪装
  • AJAX技术的网页如何处理
  • 高频请求后是否触发网站的验证码验证
  • ... 

真是学无止境啊!

4、参考链接



posted @ 2018-01-10 10:21  Dulk  阅读(748)  评论(2编辑  收藏  举报