这个作为调配的

taskMaster.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018/12/23 15:21
# @author : libaibuaidufu
# @File : taskMaster.py
# @Software: PyCharm
import queue
import random
from multiprocessing.managers import BaseManager
from todos.test import get_href
import requests
from bs4 import BeautifulSoup
import time # 发送任务的队列
task_queue = queue.Queue()
# 接收结果的队列
result_queue = queue.Queue() class QueueManager(BaseManager):
pass class SaceMnage():
def __init__(self):
# 在网页上 请求一下 拷一份
self.headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate, br', 'Accept-Language': 'zh-CN,zh;q=0.9', 'Cache-Control': 'max-age=0',
'Connection': 'keep-alive', 'Host': 'www.27270.com', 'If-Modified-Since': 'Sat, 22 Dec 2018 19',
'If-None-Match': 'W/"5c1e8fff-b918"', 'Referer': 'https', 'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}
# 把两个queue注册到网络上
QueueManager.register('get_task_queue', callable=self.get_task_queue)
QueueManager.register('get_result_queue', callable=self.get_result_queue)
# 绑定端口5000,设置验证码abc
self.manager = QueueManager(address=('127.0.0.1', 5000), authkey='abc'.encode('UTF-8'))
self.manager.start()
# 通过网络访问Queue对象
self.task = self.manager.get_task_queue()
self.result = self.manager.get_result_queue()
self.num = 1
self.url = "https://www.27270.com/word/dongwushijie/" #动物
# self.url = "https://www.27270.com/ent/meinvtupian/" # 美女 # 为解决__main__.<lambda> not found问题
def get_task_queue(self):
return task_queue # 为解决__main__.<lambda> not found问题
def get_result_queue(self):
return result_queue def main(self):
self.distributed_task(self.url)
self.close() def distributed_task(self, url):
self.num += 1
res = requests.get(url, headers=self.headers)
# 本地模拟时,写入本地 然后 测试
# with open("test.html", "r") as f:
# html = f.read()
# 中文乱码 使用以下处理
res.encoding = 'gb18030'
soup = BeautifulSoup(res.text, 'lxml')
# soup = BeautifulSoup(res.text)
# 定位
resultList = soup.select("div.MeinvTuPianBox ul li")
# print(resultList)
print(len(resultList))
for result in resultList:
a_list = result.select("a")
a = a_list[0]
# a_lists.append(a["href"])
# return a_lists
# 添加待处理任务
# for i in a_lists:
print('Put task %s ...' % a["href"])
self.task.put(a["href"]) for li in soup.select(".NewPages ul li a"):
if li.text == "下一页":
nexturl = self.url + li.get("href")
print(nexturl)
time.sleep(10)
while True:
# 不要让队列 有太多 怕 爬取不完 就设置小一点
if self.task.qsize() <= 60:
self.distributed_task(nexturl) try:
nexturl = url[:-1] + str(int(url[-1]) + 1)
print(nexturl)
time.sleep(10)
while True:
if self.task.qsize() <= 60:
self.distributed_task(nexturl)
# self.distributed_task(nexturl)
except:
# 防止队列 自动关闭 应该有更好的方法 我没去查,直接等待几个小时 哈哈哈
self.wait()
# print("not any")
# if queue.Empty:
# return
def wait(self):
import time
time.sleep(6000*3)
self.manager.shutdown()
def close(self):
# 关闭
self.manager.shutdown()
def ss(self):
zurl = "https://www.27270.com/ent/meinvtupian/list_11_212.html"
url = 'https://www.27270.com/ent/meinvtupian/list_11_'
# for z in range(1,212+1):
# zurl = f'{url}{z}.html'
# self.task.put(zurl)
self.task.put(zurl)
time.sleep(3600*3)
self.close() if __name__ == '__main__':
sace = SaceMnage()
sace.main()
# a_lists = get_href()
# distributed_task(a_lists) # soup.div['class']="MeinvTuPianBox"
# print (soup.div.ul)
# with open("test.html","wb") as f:
# f.write(res.content)

说好的动物呢!!!!!

地址:https://github.com/libaibuaidufu/queue_pacong

使用queue 做一个分布式爬虫(一)的更多相关文章

  1. Cola:一个分布式爬虫框架 - 系统架构 - Python4cn(news, jobs)

    Cola:一个分布式爬虫框架 - 系统架构 - Python4cn(news, jobs) Cola:一个分布式爬虫框架 发布时间:2013-06-17 14:58:27, 关注:+2034, 赞美: ...

  2. [python]做一个简单爬虫

    为什么选择python,它强大的库可以让你专注在爬虫这一件事上而不是更底层的更繁杂的事 爬虫说简单很简单,说麻烦也很麻烦,完全取决于你的需求是什么以及你爬的网站所决定的,遇到的第一个简单的例子是pas ...

  3. 用Nodejs做一个简单的小爬虫

    Nodejs将JavaScript语言带到了服务器端,作为js主力用户的前端们,因此获得了服务器端的开发能力,但除了用express搭建一个博客外,还有什么好玩的项目可以做呢?不如就做一个网络爬虫吧. ...

  4. 纯手工打造简单分布式爬虫(Python)

    前言 这次分享的文章是我<Python爬虫开发与项目实战>基础篇 第七章的内容,关于如何手工打造简单分布式爬虫 (如果大家对这本书感兴趣的话,可以看一下 试读样章),下面是文章的具体内容. ...

  5. python3 分布式爬虫

    背景 部门(东方IC.图虫)业务驱动,需要搜集大量图片资源,做数据分析,以及正版图片维权.前期主要用node做爬虫(业务比较简单,对node比较熟悉).随着业务需求的变化,大规模爬虫遇到各种问题.py ...

  6. 分布式爬虫框架XXL-CRAWLER

    <分布式爬虫框架XXL-CRAWLER> 一.简介 1.1 概述 XXL-CRAWLER 是一个分布式爬虫框架.一行代码开发一个分布式爬虫,拥有"多线程.异步.IP动态代理.分布 ...

  7. 使用Docker Swarm搭建分布式爬虫集群

    https://mp.weixin.qq.com/s?__biz=MzIxMjE5MTE1Nw==&mid=2653195618&idx=2&sn=b7e992da6bd1b2 ...

  8. 基于redis的简易分布式爬虫框架

    代码地址如下:http://www.demodashi.com/demo/13338.html 开发环境 Python 3.6 Requests Redis 3.2.100 Pycharm(非必需,但 ...

  9. 分布式爬虫系统设计、实现与实战:爬取京东、苏宁易购全网手机商品数据+MySQL、HBase存储

    http://blog.51cto.com/xpleaf/2093952 1 概述 在不用爬虫框架的情况,经过多方学习,尝试实现了一个分布式爬虫系统,并且可以将数据保存到不同地方,类似MySQL.HB ...

随机推荐

  1. jni 字符串的梳理 2 字符串的处理操作

    我们实现下面的一个功能: 1.首先在java层传递一个字符串到c层,c层首先将jstring转换成char*类型,然后将两个字符串相加,然后再再将char*类型转换成jstring,在上层显示出来 我 ...

  2. 使用java类的方式配置spring 需要什么注解?

    1.@Configuration 修饰类,声明当前类是一个配置类,相当于applicationContext.xml文件 2.@ComponentScan 用于指定spring在初始化容器时要扫描的包 ...

  3. SSM中保存数据出现415错误

    服务器415错误 ssm框架的controller jsp页面 问题:页面出现415错误 原因:请求和响应类型不一致 分析: 先排除以下基本的环境配置 1.URL路径对应好,视图解析器配置好,cont ...

  4. 使用TransferLearning实现环视图像的角点检测——yolo_v3_tiny

    本文选取yolov3-tiny,使用pretrained weights,实现环视图像中的角点等关键目标检测. 大神镇楼: https://pjreddie.com/darknet/yolo/ 配置参 ...

  5. composer更新命令及常用命令

    原文地址:https://www.wjcms.net/archives/composer更新命令及常用命令 composer作为php的包依赖管理工具,开发者将开发的工具包上传,然后使用者能很方便的使 ...

  6. Tomcat启动流程简析

    Tomcat是一款我们平时开发过程中最常用到的Servlet容器.本系列博客会记录Tomcat的整体架构.主要组件.IO线程模型.请求在Tomcat内部的流转过程以及一些Tomcat调优的相关知识. ...

  7. 性能测试之Jmeter中场景设置与启动方式

    Jmeter场景设置与启动方式 性能测试场景是用来模拟模拟真实用户操作的工作单元,所以场景设计一定要切合用户的操作逻辑,jmeter主要是通过线程组配合其他组件来一起完成场景的设置. 线程组设置 Jm ...

  8. RISC-V发展现状

    欲观原文,请君移步 面对xilinx和ARM联合打造的生态链,FPGA底层RTL逻辑开发人员变得可有可无,有的公司软件工程师都可以直接上手,这让传统的FPGA人员面临着一个尴尬的境地,而RISC-V的 ...

  9. SCOI 2010 连续攻击游戏(贪心,图论)

    SCOI 2010 连续攻击游戏 solution 直接就硬刚 我愿称贪心为暴力 因为题目中要求一定从小到大贪心,那么当前点的下标有能够选取的较大点,那么它一定可以和前面的一个较小点连接,所以可以直接 ...

  10. 「期望」「洛谷P1297」单选错位

    题目 题目描述 gx和lc去参加noip初赛,其中有一种题型叫单项选择题,顾名思义,只有一个选项是正确答案.试卷上共有n道单选题,第i道单选题有ai个选项,这ai个选项编号是1,2,3,-,ai,每个 ...