爬虫的定义与应用

网络爬虫(web crawler),是一种用来自动浏览万维网的网络机器人, 因其工作原理向在网上不停工作的蜘蛛而得名。

  • 搜索引擎的根基
  • 构建机器学习的数据集
  • 搜集万维网上的指定数据


爬取

服务端渲染

  • 直接获取HTTP请求返回内容

    客户端渲染

  • 通过抓包工具截取Ajax请求

  • 使用浏览器渲染工具模拟浏览器执行
  • 通过正则表达式提取隐藏在HTML中的JavaScript变量

    增量爬取

  • 单页内容的变化,不断抓取监控页面的信息,并与原来的信息作比较后跟新。

  • 数量的变化
    • 顺序可控,可以通过记录最后一次抓取地址,下一次从记录处开始抓取。
    • 顺序不可控,一般会通过数据库后者布隆过滤器将网站存储下来,爬取时通过对比判断是否要爬取。

解析

基于模板方法

存储

  • 文件
  • 数据库
  • 搜索引擎
  • 云存储

防反爬

  • robots.txt 参数说明
  • 判断是否为浏览器
    • 识别HTTP的headers中有没有user-agent
  • 登录
    • Cookies池
  • IP封禁
    • 代理IP池
    • ADSL网络
  • 各种验证码

  • 骚扰问题:通过计算机的快速访问,通常网站通过人数来约定他的访问能力,例如爬虫每秒钟爬取几十万字的资源,服务器无法提供这种能力,网络爬虫可能会为web网站巨大的资源开销。

  • 法律风险:服务器上的数据有产权归属,网络爬虫获取数据后牟利将带来法律风险。

    如何规避风险

  • 严格遵守网站设置的robots协议;Robots协议属于“君子协议”,但是大部分人都会资源遵守。网站根目录下如果存在robots.txt,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,所有的搜索蜘蛛将能够访问网站上所有没有被口令保护的页面。

  • 在规避反爬措施的同时优化自己的代码,避免给被访问网站造成干扰;
  • 在使用、传播抓取到的信息时,应审查所抓取的内容,如发现属于用户的个人信息、隐私或者他人的商业秘密的,应及时停止并删除。

加速

  • 多线程和多进程
  • 异步IO
  • 分布式
  • 其他
    • DNS缓存
    • 更加高效的去重策略

参考:
万维网的蝴蝶结形状
Python网络爬虫与信息提取
如何入门爬虫
八爪鱼爬虫平台
高效网络爬虫
Python网络爬虫知识点总结
网络爬虫基础.pptx