Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

请问worker有独立的标志吗 #18

Closed
yun17 opened this issue May 23, 2017 · 16 comments
Closed

请问worker有独立的标志吗 #18

yun17 opened this issue May 23, 2017 · 16 comments
Labels

Comments

@yun17
Copy link
Collaborator

yun17 commented May 23, 2017

每个worker是不是自动被分配一个名称,每启动一个worker,其他的worker都会显示同步这个worker.,那个名字就是主机名

我想要在代码里获得自己的名字应该怎么做?

这个名字我用来修改cookies获取规则,因为当前的cookies获取规则下,要被封号就一起被封。

@ResolveWang
Copy link
Member

主要就是通过hostname来识别各个节点的,应该可以通过broker来获取到,这个我也得去看看celery的文档才知道。还有个思路,通过系统调用 hostname 这个命令获取主机名,就是你想要的

@ResolveWang
Copy link
Member

ResolveWang commented May 23, 2017

python -c "import socket;print(socket.gethostname())" 通过标准库 socket 可以获取到主机名,和celery无关

@ResolveWang
Copy link
Member

因为当前的cookies获取规则下,要被封号就一起被封。这句话的要被封号就一起被封是什么意思?不是很懂。有啥好的思路,可以介绍一下

@yun17
Copy link
Collaborator Author

yun17 commented May 23, 2017

因为现在的cookies获取规则不是按队列轮流吗?如果一个账号符合微博封号原则,那么cookies池里所有的号应该都符合封号规则,那么一封号所有的账号都没用了。这样爬虫程序就终止了,而且所有的任务都被刷没了(对这个设定也深表怨念🙄)

本来我考虑一个主机分配一个cookies,cookies用坏了再去取新的,这样持久力更强一些。
下午3:15开了一个四级的微博号(3元一个),四个节点,10进程。到5:55被封。

@yun17
Copy link
Collaborator Author

yun17 commented May 23, 2017

在临近被封的时间(15分钟内),我还进行了一次搜索任务

另外,这种账号被封,程序并没有检测出来,一般都是我手动把这个失效账号从redis里删除的。

@yun17
Copy link
Collaborator Author

yun17 commented May 23, 2017

嗯,我觉得比较经济的方案是:四个节点一个账号,用坏的取新的

选择谨慎的方案,避免封号我觉得并不划算
账号不贵,如果选择谨慎的方案,那反而浪费服务器资源,而且花上更多的时间等待并不好

@yun17
Copy link
Collaborator Author

yun17 commented May 23, 2017

卧槽,发现ip被封了🙄。登陆失败

看来还是用按量付费换服务器好了,也不贵,就人工稍微麻烦点。

或者阿里云今天刚出了弹性公网,换公网ip,资费是按量的(不是广告)
image

果然做爬虫要氪金🙂

另外30分钟后ip正常

@yun17
Copy link
Collaborator Author

yun17 commented May 23, 2017

试了下,一个账号差不多只能5个节点,新开第6个节点会失败

@ResolveWang
Copy link
Member

发现账号都是在三个小时左右被封的。账号多也是这样。这就比较有规律了。我来总结一下你的发现:

  1. 一个账号四个IP,每个节点10个进程,经过了近三个小时被封
  2. 程序还存在不完善的地方,某些账号被封了,程序并发现不了。对于这一点,我觉得我们应该把该账号被封的时候返回的内容拿到,然后才好改善程序
  3. ip也会被封。但是这里我有一些疑问,是哪个IP被封了,是那四个节点的其中一个还是全部?被封了我们登录或者直接请求页面的时候,返回的是什么(这一点很重要,程序中可以适当提示用户ip不可用)?30分钟后是指爬虫被封之后的30分钟吗?
  4. 一个账号大概可以同时在五个节点使用。第六个节点就会失败。这里的失败是什么意思?是账号被封还是访问会出现验证码还是访问被拒绝?

@ResolveWang
Copy link
Member

阿里云那个我还没试,也去试试 😆

@ResolveWang
Copy link
Member

另外,兄弟,把和微博反爬虫系统相关的信息放在issue17里面,减轻大伙儿的阅读负担

@ResolveWang
Copy link
Member

弹性公网ip和啥机器绑定?也是弹性计算云主机?

@yun17
Copy link
Collaborator Author

yun17 commented May 23, 2017

该账号被封的时候返回的内容拿到,然后才好改善程序
具体的页面等新的这个账号被封了我提个pr。

是哪个IP被封了,是那四个节点的其中一个还是全部?
具体哪个我没有试,我就在常用的那个尝试了下模拟登陆,验证码正确,密码正确的情况下登陆失败。我觉得应该是ip被封了。四个节点我没有都试,因为它们情况类似,要被封的也应该是一起的。具体页面我也没有,不清楚返回的是什么。

30分钟后是指爬虫被封之后的30分钟吗?
我发现模拟登陆失败之后,我就去找按量付费的服务器,租完回来差不多半小时,又试了下正常登陆。正常之后我又大量的爬了数据,没有出现异常。

这里的失败是什么意思?是账号被封还是访问会出现验证码还是访问被拒绝?
其他节点正常工作,第六个节点大量提示解析错误,应该是访问被拒绝。
我在cookies池里弄了一个账号,5个节点正常工作。也就是说,cookies池里是1个还是多个效果都是差不多的,反正大量的访问都要被封😐

@ResolveWang
Copy link
Member

这样子的话,我们可以让一个cookie绑定到5个节点上,每当该cookies被封了,我们就从可用的cookie中拿一个出来再绑定,或者说被封了马上再模拟登陆获取一个可用的cookies.这样大概5台机器一天会丢弃8个账号左右。并且IP应该也会被暂时封一段时间。
如果我理解没错的话,从你的实验来看,账号被封了IP不一定被封,IP被封的情况下,账号必定被封。还有一点,你尝试的模拟登陆的那个账号应该不是被封的账号吧 🤒

@ResolveWang
Copy link
Member

ResolveWang commented May 23, 2017

还有给我讲讲你的节点是不是用的阿里云的弹性云计算节点的按量付费啊?我刚去看了,好像得充值100块钱,先还没动手,先问问你 😄 。
你的发现真的很了不起,赞一个 👍

@ResolveWang
Copy link
Member

还有一个问题,我觉得不同请求,微博的容忍程度可能不一样,你啥时候帮忙单独试试,只抓取用户粉丝和关注,看看三个小时内,单个cookie会不会被封

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants