题记:

  1024,今天是个程序猿的节日 ,哈哈,转为正题,从事了一线网络爬虫开发有近1000天。简单阐述下个人对网络爬虫的理解。

提纲:

1:是什么

2:能做什么

3:怎么做

  4:综述

1:是什么

    wiki释义:网络蜘蛛(Web spider)也叫网络爬虫(Web crawler)[1],蚂蚁(ant),自动检索工具(automatic indexer),或者(在FOAF软件概念中)网络疾走(WEB scutter),是一种“自动化浏览网络”的程序,或者说是一种网络机器人。它们被广泛用于互联网搜索引擎或其他类似网站,以获取或更新这些网站的内容和检索方式。它们可以自动采集所有其能够访问到的页面内容,以供搜索引擎做进一步处理(分检整理下载的页面),而使得用户能更快的检索到他们需要的信息。

网络爬虫始于一张被称作种子的统一资源地址(URLs)列表。当网络爬虫访问这些统一资源定位器时,它们会甄别出页面上所有的超链接,并将它们写入一张"待访列表",即所谓"爬行疆域"(crawl frontier)。此疆域上的统一资源地址将被按照一套策略循环访问。

白话语:网络爬虫,是一个(组,套,集群 )能够自动访问网络资源,并抽取目标数据的程序。 类比模拟人工点击访问百度首页,右键打开源码并对源码抽取分析的过程,转化为自动化,并主动发现新连接继续重复的过程。

案例: 百度搜索引擎的数据支持主要由百度爬虫提供。

2:能做什么

       得数据者得天下,网络爬虫应用于搜索引擎是大家都知道的,除此之外,还常应用于,比价,电商,舆情,内容聚合网站等。比价比较有名的惠惠助手。还应用于模拟表单提交,自动登录,自动发送邮件,转发内容等等。  一般数据源从互联网公开信息获取,主要由门户,垂直网站,sns,论坛。   数据分类可参照下图

 

   3:怎么做

    开源爬虫,java有 nutch,heritrix 。python 有 Scrapy ,c的 ,php的也都有 。

从技术角度上来讲,没有好坏之分,还在于人对它的熟稔程度和使用情况 。 非要排资论辈的话 ,只能说 nutch是鼻祖 , nutch建立在luence上, 并且孵化了当下如火如荼hadoop。

其它自行脑补。

自主研发,虽然有那么多的开源框架,鉴于国内网络规范的不规范,及越来越的网站,开始防爬虫。 仅仅借助开源框架很难满足自身的业务需求。 结合业务端,一般公司做法

是自己研发一套适应自己业务的爬虫。 数据来源一般不外乎下图:

自助研发的方向也比较多,结合数据来源站点特征及自身业务,有追求 大而全的,有追求小而美的。有青睐金融数据,有对电商数据情有独钟的。有的追求功能,有的追求性能。   暂不做讨论。

技术架构 ,php python面向过程的采集定向站点数据较为方便。  大吞吐量的 一般采用java,c写分布式式爬虫。 中央调度式(mater/slave),p2p,mixed 等 可参照

crawler_分布式网络爬虫的设计与实现_设计图。 曾用第一种方式实现,在一般网络环境下测试,三个节点 下载速度 28页面/秒。

爬虫功能部分,主要是下载和解析模块。

下载模块:下载各个语言包都有,需要注意的就是 分析网络流,分析工具有很多各个浏览器都带的有,较为好用的firefox,和 chrome. 还有一些第三方的 findder, wireshark,httpwatcher

一些请求参数和响应cookie传递。

解析:通用的做法是正则解析,写的好的话性能也最好。也有一些好用的 dom封装解析的,htmlparse,jsoup,等等。写一些jquery 语法选择器 ,也称xpath. crawler_jsoup HTML解析器_使用选择器语法来查找元素 crawler_解析之_jquery_语法选择器使用方法 ,应对规范网站第二种做法比第一种好写,正则毕竟写起来比xpath要麻烦。

  4:综述

    关于爬虫,要写的太多,一线爬虫屌丝码农文采有限,后续会不定期陆续补充,其实任何技术都是,不在于问了多少,看了多少, 得亲手自己去试,多练 ,多试错,猜测,验证的一个过程。

难免疏忽,望大家海涵。

crawler_浅谈网络爬虫的更多相关文章

  1. 浅谈网络爬虫爬js动态加载网页(二)

    没错,最后我还是使用了Selenium,去实现上一篇我所说的问题,别的没有试,只试了一下firefox的引擎,总体效果对我来说还是可以接受的. 继续昨天的话题,既然要实现上篇所说的问题,那么就需要一个 ...

  2. 浅谈网络爬虫爬js动态加载网页(一)

    由于别的项目组在做舆情的预言项目,我手头正好没有什么项目,突然心血来潮想研究一下爬虫.分析的简单原型.网上查查这方面的资料还真是多,眼睛都看花了.搜了搜对于我这种新手来说,想做一个简单的爬虫程序,所以 ...

  3. 浅谈网络爬虫爬js动态加载网页(三)

    上一篇讨论了web driver对动态网页的抓取与分析,可以很清楚的看出这是一种集中式处理方式,简单说,就是利用服务器,打开一个真正的brower,然后将需要解析的地址交给浏览器,浏览器去解析,然后将 ...

  4. 浅谈Scrapy爬虫(一)

    以下谈论的 scrapy 基于 0.20.2 版本(当前最新版本是 0.22.0 ),python 2.7.6. 开发环境是windows 7 sp1.   互联网上比较有价值的参考资料 1. Scr ...

  5. 浅谈 Scrapy 爬虫(二)

    越写越像官方文档的翻译,偏离了初衷.写一些官方文档里没有的内容吧.   在不限制宽带的环境下,根据页面的大小, Scrapy 一秒能爬取40-70个页面,一天在400万到600万页面.也就是说 Scr ...

  6. 浅谈网络I/O多路复用模型 select & poll & epoll

    http://blog.csdn.net/nk_test/article/details/50662946

  7. 浅谈爬虫 《一》 ===python

    浅谈爬虫 <一> ===python  ‘’正文之前先啰嗦一下,准确来说,在下还只是一个刚入门IT世界的菜鸟,工作近两年了,之前做前端的时候就想写博客来着,现在都转做python了,如果还 ...

  8. crawler_网络爬虫中编码的正确处理与乱码的解决策略

    转载: http://hi.baidu.com/erliang20088/item/9156132bdaeae8949c63d134 最近一个月一直在对nutch1.6版进行中等层次的二次开发,本来是 ...

  9. 浅谈通信网络(三)——TCP/IP协议

    简介 Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议.In ...

随机推荐

  1. C++包括头文件&lt;&gt;和&quot;&quot;差额

    #include "book.h" #include<iostream.h> 在刚開始学习都会有这样的迷惑.有的程序用<>.有的却用"" ...

  2. 网站通常使用一些javascript包裹 简化电话

    //对于Web地址参数 //前面加"=="进行标识,否则直接返回 //解码时依据是否含有"=="标识来决定是否要解码 var base64EncodeChars ...

  3. MongoDB时间处理问题

    MongoDB保存到数据库的时候,默认为UTC时间,在数据库保存时,会和当前时间有个间隔,差距为8小时. 在读取的时候,需要再次转换回来,比较麻烦. 其实,Mongo本身就已经提供了相应的处理方法,即 ...

  4. hdu 2767 Proving Equivalences 强连通缩点

    给出n个命题,m个推导,问最少添加多少条推导,能够使全部命题都能等价(两两都能互推) 既给出有向图,最少加多少边,使得原图变成强连通. 首先强连通缩点,对于新图,每一个点都至少要有一条出去的边和一条进 ...

  5. 改变,从跨出第一步開始——记海大ITAEM团队首次IT讲座掠影

    之前以前写了"行动带来力量,周三(5月7日)晚IT讲座通知",昨晚已经跨出了第一步.让我们还是看举办者骆宏的QQ空间的文字吧.尽管未能到现场助兴,但看着海大学子在不断挑战自己,进而 ...

  6. android--jenkins+gradle+android自动化构建apk步骤(转)

    第一步,安装jenkins,这个网上教程挺多的. 第二步,下载并配置gradle.下载地址http://www.gradle.org/ 解压gradle至某路径下,如/usr/local/lib/gr ...

  7. redis内存管理代码的目光

    zmalloc.h /* zmalloc - total amount of allocated memory aware version of malloc() * * Copyright (c) ...

  8. [MySQL]--&gt;询5 几天之内解决在新年发行一个同事的生日过程

    前言:        遇到朋友提问,例如以下:SELECT * FROM ali_users WHERE  DATEDIFF(CAST(CONCAT(DATE_FORMAT(NOW(),'%y'),D ...

  9. Java-如何去掉JFrame上的最大化最小化和关闭按钮(转)

    在JDK1.4以前,我们只有一种方式来去掉窗口的标题栏,那就是直接使用JWindow,用JWindow来代替JFrame使用.但用过JWindow的人一定知道,JWindow在操作系统的任务栏是不可见 ...

  10. error while loading shared libraries: libpthread.so.0: cannot open shared object file: No such file

    安装rac10g,出现例如以下错误: [root@rac2 oracle]# /u01/product/crs/root.sh WARNING: directory '/u01/product' is ...