python分布式爬虫实践
Posted hipth
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python分布式爬虫实践相关的知识,希望对你有一定的参考价值。
近期阅读了范传辉的Python爬虫开发与项目实战一书,对其第七章的分布式爬虫进行实操
遇到自己环境上代码跑不通的问题,经一番功夫,发现主要是由以下几点造成的:
书中环境:python2.7,linux
本地环境:python3.4,window
1.文中导入模块为import Queue,py3中应该为from multiprocessing import Queue
2.window环境下lambda无法被序列化,要使用自定义函数,该自定义函数需要放在代码开头,如下;
url_q=Queue() result_q=Queue() def get_url_q(): global url_q return url_q def get_result_q(): global result_q return result_q class NodeManager(object): def start_manager(self,url_q,result_q): BaseManager.register(‘get_task_queue‘,callable=get_url_q) BaseManager.register(‘get_result_queue‘,callable=get_result_q)
3.window环境下BaseManager函数address传参为‘’的话不代表本机,linux才代表本机,应明确写清本机地址,且py3下authkey传参应该编码转换,如下:
manager=BaseManager(address=(‘127.0.0.1‘,8001),authkey=‘baike‘.encode(‘utf-8‘))
4.另外实操中主要遇到的问题就是数据的编码格式的转换,编码格式不同会导致爬虫执行到某个步骤就一直暂停了(PS:我的是卡在解析网址后一直没动)
5.代码主要由两个窗口执行,其中NodeManager只用于启动进程,不输出,SpiderWork进程用于输出
以上是关于python分布式爬虫实践的主要内容,如果未能解决你的问题,请参考以下文章