建議先大概瀏覽一下項目結構python
新手向,基於Redis構建的分佈式爬蟲。
以爬取考研網的貼子爲例,利用 PyQuery, lxml 進行解析,將符合要求的文章文本存入MySQ數據庫中。git
協做模塊,用於爲Master&Worker模塊提供代理IP支持github
提取知足條件的文章url,並交給Worker進一步處理redis
解析文章內容,將符合要求的存入數據庫sql
sqlalchemy => 1.0.13
pyquery => 1.2.17
requests => 2.12.3
redis => 2.10.5
lxml => 3.6.0數據庫
須要預先安裝MySQL-server 和 Redis-server.微信
MySQL中應有名爲kybsrc的數據庫,且該數據庫包含一個名爲posts的表,擁有num(INT AUTO_INCREMENT)和post(TEXT)兩個字段。網絡
第一次執行完後,每五分鐘運行一次工做函數多線程
默認只執行一次分佈式
默認循環監聽是否有新的URL待解析
# Summary Reference # --------- # 建立句柄 def make_redis_handler(): pool = redis.ConnectionPool(host=r_server['ip'], port=r_server['port'], password=r_server['passwd']) return redis.Redis(connection_pool=pool) # 得到句柄 def make_proxy_handler(): return make_redis_handler() # 保存到指定的set下 def check_and_save(self, proxy): 'pass' self.redis_handler.sadd(r_server['s_name'], proxy)
#Summary Reference #--------- def save_proxy_ip(self): 'pass' for proxy in self.proxy_ip: Thread(target=self.check_and_save, args=(proxy,)).start() def get_url(url): 'pass' while True: 'pass' resp = request('get', url, headers=headers, proxies={'http': proxy}) 'pass'
有任何問題能夠與我聯繫(微信:smartseer)