爬虫基础知识

一.基础知识

1.网页分类
  • 静态网页
  • 动态网页
  • webservice(restapi)
2.爬虫能做什么
  • 搜索引擎——百度、google、垂直领域搜索引擎
  • 推荐引擎——今日头条
  • 机器学习的数据样本
  • 数据分析(如金融数据分析)、舆情分析等

二.正则表达式

1.正则表达式
  • 特殊字符

    ^$*?+{2}{2,}{2,5}|
    [][^][a-z].
    \s\S\w\W
    [\u4E00-\u9FA5]()\d
    
    #\s为空格  \S表示不为空格
    #\w为[a-zA-Z0-9_]  \W表示不为其中内容
    #[\u4E00-\u9FA5] 表示中文
    #\d 表示数字
    
  • 默认是贪婪模式的匹配(从左到右最大的匹配,也就相当于从右到左的最小匹配),使用在.*之后加?指定非贪婪模式

2.深度优先和广度优先
  • 网站的树结构【需要考虑是否会循环遍历同一个url】

  • 深度优先算法和实现(递归实现)—递归的栈太深会导致栈溢出

    def depth_tree(tree_node):
        if tree_node is not None:
            print (tree_node.data)
            if tree_data._left is not None:
                return depth_tree(tree_node._left)
            if tree_data._right is not None:
                return depth_tree(tree_node._right)
    
  • 广度优先算法和实现(队列实现)

    def level_queue(root):
        """利用队列实现树的广度优先遍历"""
        if root is not None:
            return
        my_queue = []
    	node = root
        my_queue.append(node)
        while my_queue:
            node = my_queue.pop(0)
            print(node.elem)#打印节点的值
            if node.lchild is not None:
                my_queue.append(node.lchild)
            if node.rchild is not None:
                my_queue.append(node.rchild)
    
3.爬虫去重策略
  • 方式一:将访问过的url保存到数据库中
  • 方式二:将访问过的url保存到set中,只需要o(1)的代价就可以查询url,但是内存占用会越来越大
  • 方式二的优化:url经过md5等方法哈希后保存到set中(使用md5可以将一个url压缩到16个byte)
  • 方法二的优化:用bitmap方法,将访问过的url通过hash函数映射到某一位(不太适用)
  • 方法二的再优化:bloomfilter方法对bitmap进行改进,多重hash函数降低冲突
4.字符串编码
  • 计算机只能处理数字,文本转换为数字才能处理。计算机中8个bit作为一个字节,所以一个字节能表示最大的数字就是255
  • 计算机是美国人发明的,所以一个字节可以表示所有字符了,所以Ascii(一个字节)编码就称为美国人的标准编码
  • 但是Ascii处理中文明显是不够的,中文不止255个汉字,所以中国制定了GB2312编码,用两个字节表示一个汉字。GB2312还把Ascii包含进去了。同理,日文,韩文等等上百个国家为了解决这个问题就都发展了一套字节的编码,标准就越来越多,如果多种语言混合显示就一定会出现乱码
  • unicode将所有语言统一到一套编码中
  • 乱码问题解决了,如果内容全是英文,unicode编码比Ascii需要多一倍的存储空间,同时如果传输需要多一倍的传输
  • 所以出现了可变长的编码utf-8,把英文变长一个字节,汉字3个字节。特别生僻的变成4-6字节,如果传输大量的英文,utf-8作用就很明显了
  • 读取文件的时候,将文件中的utf8编码转换为unicode编码写入内存;当保存文件时,将文件中的unicode编码转化为utf-8编码存储到文件中
  • 在编码中只能将unicode的字符集进行编码,python3默认会将字符串读取成unicode,所以直接调用.encode("编码格式")不会报错;而在python2中会根据自身系统的默认编码决定读取的编码格式,需要先进性decode在进行encode
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值