编码问题
网站目前最多的两种编码:utf-8,或者gbk,当我们采集回来源网站编码和我们数据库存储的编码不一致时,比如http://163.com的编码使用的是gbk,而我们需要存储的是utf-8编码的数据,那么我们可以使用Python中提供的encode()和decode()方法进行转换;
比如:
content = content.decode('gbk', 'ignore') # 将gbk编码转为unicode编码。
content = content.encode('utf-8', 'ignore') # 将unicode编码转为utf-8编码
如果中间出现了unicode编码,我们需要转为中间编码unicode,才能向gbk或者utf-8转换。
增量爬取
增量爬行是爬虫不重复下载下载的内容。为了实现增量爬行,我们需要使用一个新的概念——网址池。网址池用于统一管理所有网址。我们通过网址池记录我们的python爬虫访问过哪些内容,以避免重复。网址池的用途也可以实现断点续爬等。断点续爬是让之前没有爬过的网址继续爬虫。
爬虫被禁止
爬虫会给服务器带来很大的负载,所以很多服务器会限制爬虫,甚至禁用爬虫。众所周知,要构建合理的http访问头,比如user-agent域的值。但是,还有很多其他避免被禁止的问题,比如放慢爬虫的访问速度,让爬虫的访问路径与用户的访问路径一致,采用动态ip地址等等。