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进程用于输出

猜你喜欢

转载自www.cnblogs.com/hipth/p/8966784.html