爬虫基础知识

正则表达式(python中使用re包)

  1. ^ : 以某个字符开头,例如^b,为字母b开头
  2. . :代表任意字符
  3. * : 前面的字符出现任意多次,例如“^b.*”代表以b开头,后面任意位任意字符的字符串
  4. $ : 代表以某个字符结尾。例如3$意味以3结尾
  5. ?: 是一种非贪婪匹配的模式,默认为贪婪匹配(倒序查找),例如“.*?(b.*?b).*”,匹配“booooobbby”,输出为“booooob” ,如果第二个b不加?,则会贪婪匹配从右边开始,即匹配到最后一个b
  6. (): 提取括号中的子字符串
  7. ‘+’ : 至少出现一次
  8. {} : 限定出现的次数
  9. | : 或
  10. [] : 字符串匹配中括号中的任意一个字符都可以,[0-9]意味区间,[^1]意味不等于1
  11. \s \S : s代表空格,S代表不为空格
  12. \w \W : 代表字母下划线,W代表非字母下划线
  13. [\u4E00-\u9FA5] : 代表汉字
  14. \b : 代表数字

深度优先和广度优先遍历算法

url常见去重策略

  1. 将访问过的URL保存到数据库中
  2. 将访问过的URL储存在set中,只需要0(1)的代价就可以查询url
  3. URL经过md5等hash运算后保存在set中
  4. 用bitmap方法,把访问过的url通过hash函数映射到某一位
  5. bloomfilter方法对hash算法进行改进,多重hash函数降低冲突

字符串编码

  1. 计算机只能处理数字,文本必须转换为数字才能处理。计算机中以8个bit作为一个字节,所以一个字节能表示的最大的数字就是255
  2. 计算机是美国人发明的,所以一个字节就能表示所有的字符,所以ASC||(一个字节)就成了美国人的标准编码
  3. ASCII码处理中文明显是不够的,所以中国制定了GB2312编码,用两个字节表示一个汉字。GB2312还把ASCII包含进去了,同理日本、韩国等国家都各有一套自己的编码,如此一来,出现多种语言混合的文本就会出现乱码。
  4. Unicode是将所有语言统一到一套编码里。乱码问题解决了,但是如果文本内容全部都是英文的话,传输和储存需要的空间就扩大了一倍。
  5. utf-8,可以变长的编码。英文压缩至一个字节,汉字三个字节,特别生僻的4个字节。但是utf-8在编程处理的时候会变的复杂(内存运算复杂)
  6. 所以一般的做法是储存文件使用utf-8编码,内存运算时使用Unicode编码。Python2Windows默认为GB2312编码,Linux默认为UTF-8编码,在做decode运算的时候要先转换为Unicode,Python3默认为Unicode编码