抱歉,你查看的文章不存在

python分布式爬虫搜索引擎实战-3-爬虫网址去重策略+Python字符串编码问题解决

爬虫网址去重策略

  1. 将访问过的url保存到数据库中
  2. 将url保存到set中。只需要O(1)的代价就可以查询到url

100000000*2byte*50个字符/1024/1024/1024 = 9G

  1. url经过md5等方法哈希后保存到set中,将url压缩到固定长度而且不重复
  2. 用bitmap方法,将访问过的url通过hash函数映射到某一位
  3. bloomfilter方法对bitmap进行改进,多重hash函数降低冲突

scrapy去重使用的是第三种方法:后面分布式scrapy-redis会讲解bloomfilter方法。

Python字符串编码问题解决:

  1. 计算机只能处理数字,文本转换为数字才能处理,计算机中8个bit作为一个字节, 所以一个字节能表示的最大数字就是255
  2. 计算机是美国人发明的,所以一个字节就可以标识所有单个字符 ,所以ASCII(一个字节)编码就成为美国人的标准编码
  3. 但是ASCII处理中文明显不够,中文不止255个汉字,所以中国制定了GB2312编码 ,用两个字节表示一个汉字。GB2312将ASCII也包含进去了。同理,日文,韩文,越来越多的国家为了解决这个问题就都发展了一套编码,标准越来越多,如果出现多种语言混合显示就一定会出现乱码
  4. 于是unicode出现了,它将所有语言包含进去了。
  5. 看一下ASCII和unicode编码:
    1. 字母A用ASCII编码十进制是65,二进制 0100 0001
    2. 汉字"中" 已近超出ASCII编码的范围,用unicode编码是20013二进制是01001110 00101101
    3. A用unicode编码只需要前面补0二进制是 00000000 0100 0001
  6. 乱码问题解决的,但是如果内容全是英文,unicode编码比ASCII编码需要多一倍的存储空间,传输也会变慢。
  7. 所以此时出现了可变长的编码"utf-8" ,把英文:1字节,汉字3字节,特别生僻的变成4-6字节,如果传输大量的英文,utf8作用就很明显。

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

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

#python3
import sys
sys.getdefaultencoding()
s.encoding('utf-8')
#python2
import sys
sys.getdefaultencoding()
s = "我和你"
su = u"我和你"
~~s.encode("utf-8")#会报错~~
s.decode("gb2312").encode("utf-8")
su.encode("utf-8")

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

有趣的Python

0 篇文章106 人订阅

相关文章

来自专栏水击三千

JavaScript变量作用域

执行环境是JavaScript中比较重要的概念。执行环境定义了变量或者函数有权访问的其他数据决定了他们各自的行为,每个执行环境都有一个与之关联的变量,环境中定义...

2869
来自专栏九彩拼盘的叨叨叨

ES6 之 Proxy 介绍

Proxy(代理) 是 ES6 中新增的一个特性。Proxy 让我们能够以简洁易懂的方式控制外部对对象的访问。其功能非常类似于设计模式中的代理模式。

1063
来自专栏吴伟祥

Shell脚本学习总结(二) 流程控制 转

Shell case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。case语句格式如下:

762
来自专栏菜鸟致敬

【Lua菜鸟②】数据类型

Lua是动态类型语言,变量不要类型定义,只需要为变量赋值。 值可以存储在变量中,作为参数传递或结果返回。(我想了想python) -- 用来单行注释 --[[...

4486
来自专栏Python小屋

Python使用超高效算法查找所有类似123-45-67+89=100的组合

问题描述:在123456789这9个数字中间插入任意多个+和-的组合,使得表达式的值为100,输出所有符合条件的表达式。 昨天发了一个暴力测试的方法来解决问题,...

3035
来自专栏java一日一条

java面试小题系列(一)

973
来自专栏贾老师の博客

Makefile 变量定义

1496
来自专栏未闻Code

Python列表与deque的区别

3552
来自专栏coolblog.xyz技术专栏

Dubbo 源码分析 - SPI 机制

SPI 全称为 Service Provider Interface,是 Java 提供的一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中,...

831
来自专栏微信公众号:Java团长

Java面试宝典

允许不同类对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用).主要有以下优点:

2252

扫码关注云+社区

领取腾讯云代金券