美文网首页
爬虫基础知识回顾

爬虫基础知识回顾

作者: 以七v为书 | 来源:发表于2018-11-20 09:46 被阅读0次

    爬虫基础知识

    第一章和第二章是课程简介和环境安装,这个比较简单就不记录了。
    1. 技术选型

    scrapy 可以加入requests和beautifulsoup
    scrapy基于twisted,性能好
    方便扩展,有很多内置功能
    内置的css和xpath selector很方便,速度快

    1. 爬虫能做什么?

    搜索引擎:百度 垂直领域搜索引擎(只爬某领域)
    推荐引擎:今日头条
    机器学习的数据样本
    数据分析(金融数据分析) 舆情分析

    1. 正则表达式

    比如: 一天前中提取出1

    • :代表以该字符为开头。如b就是b为开头。
    • .: 代表任意一个字符。如^b.就是b开头后面一个字母任意
    • : 代表前一个字符可以出现任意次(0个也可以)。如^b.就是b开头后- 面可有任意数个任意字母
    • : 代表前一个字符为结尾符合。 如:.*3就是以3为结尾的任意字符串
    • ?:非贪婪匹配。一般情况从右往左匹配正则,?可以实现从左往右,非贪婪指遇到第一个就结束。.?(b.?b).*就是首先开始的b和b之间的字符串
    • +: 代表前面的字符至少出现一次(0个到无数个)。如b.+指b后面至少一个任意字母
    • {2} {2,5} {2, }: 代表前面的字符出现2次。代表前面的字符出现2到5次. 代表前面字符出现2次及两次以上
    • |:代表或的意思 b|c,从左到右,看先匹配到那个。
    • (): 代表子字符串。如((a|b)123)代表group(1)为外层括号里的a123|b123;group(2)为内层括号值
    • []: 代表[]内的字符满足任意一个都可以。1 :[abcdefg]123代表以里面任意abcdefg中一个字母开头的都可以
    • 2:[0-9] [a-z]代表可以为0-9范围内任意一个字符,代表a-z范围任意一个字符 3: [^1] ^为取反,只要不等于1就可以
    • 注: 进入[]的字符都不再具有特殊含义[.]就指匹配到.或者
    • \s \S: 1:\s代表匹配到一个空格。2:\S代表匹配到一个非空格
    • \w \W: 匹配单词字符[a-zA-Z0-9_]/非单词字符
    • \d: 匹配数字

    提取出生日期

    import re
    
    line = "XXX出生于2001年6月"
    # line = "XXX出生于2001/6/1"
    # line = "XXX出生于2001-6-1"
    # line = "XXX出生于2001-06-01"
    # line = "XXX出生于2001-06"
    
    regex_str = ".*出生于(\d{4}[年/-]\d{1,2}([月/-]\d{1,2}日|[月/-]\d{1,2}|[月/-]$|$))"
    
    match_obj = re.match(regex_str, line)
    if match_obj:
        print (match_obj.group(1))
    
    1. 爬虫网址去重策略
    • 将访问过的url保存到数据库中
    • 将url保存到set中。只需要O(1)的代价就可以查询到url
    • url经过md5等方法哈希后保存到set中,将url压缩到固定长度而且不重复
    • 用bitmap方法,将访问过的url通过hash函数映射到某一位
    • bloomfilter方法对bitmap进行改进,多重hash函数降低冲突
    1. Python字符串编码
    • 计算机只能处理数字,文本转换为数字才能处理,计算机中8个bit作为一个字节,所以一个字节能表示的最大数字就是255
    • 计算机是美国人发明的,所以一个字节就可以标识所有单个字符,所以ASCII(一个字节)编码就成为美国人的标准编码,但是ASCII处理中文明显不够,中文不止255个汉字,所以中国制定了GB2312编码,用两个字节表示一个汉字。GB2312将ASCII也包含进去了。同理,日文,韩文,越来越多的国家为了解决这个问题就都发展了一套编码,标准越来越多,如果出现多种语言混合显示就一定会出现乱码,于是unicode出现了,它将所有语言包含进去了。
    • 看一下ASCII和unicode编码:
      字母A用ASCII编码十进制是65,二进制 0100 0001
      汉字"中" 已近超出ASCII编码的范围,用unicode编码是20013二进制是01001110 00101101
      A用unicode编码只需要前面补0二进制是 00000000 0100 0001乱码问题解决的,但是如果内容全是英文,unicode编码比ASCII编码需要多一倍的存储空间,传输也会变慢。所以此时出现了可变长的编码"utf-8" ,把英文:1字节,汉字3字节,特别生僻的变成4-6字节,如果传输大量的英文utf8作用就很明显。

    读取文件,进行操作时转换为unicode编码进行处理
    保存文件时,转换为utf-8编码。以便于传输
    读文件的库会将转换为unicode

    python2 默认编码格式为ASCII,Python3 默认编码为 utf-8

    在慕课网上学习了bobby老师的爬虫课程,这里给出地址

    https://coding.imooc.com/class/chapter/92.html#Anchor
    感兴趣的可以学习

    相关文章

      网友评论

          本文标题:爬虫基础知识回顾

          本文链接:https://www.haomeiwen.com/subject/mfhtqqtx.html