1
bdbai 2015-11-15 20:36:27 +08:00 via iPhone
目测服务器是按照每个 IP 限制请求的,同一个 IP 再折腾也没用。
|
2
kendetrics 2015-11-15 20:43:09 +08:00
每个线程走不同的代理
|
3
honmaple OP @kendetrics 请教应该怎么设置代理
def __init__(self): self.proxylist = ('120.195.199.251:80', '110.73.7.198:8123') self.proxies = {'':random.choice(self.proxylist)} self.user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' self.headers = { 'User-Agent' : self.user_agent } def contentlist(self,url): proxy = urllib.request.ProxyHandler(self.proxies) opener = urllib.request.build_opener(proxy, urllib.request.HTTPHandler) urllib.request.install_opener(opener) request = urllib.request.Request(url=url, headers=self.headers) response = urllib.request.urlopen(request) content = response.read().decode('utf-8') return content 我这样写有什么错误,不管怎么换 ip,结果还是 403 |
4
MinskyNg 2015-11-15 22:01:35 +08:00
爬虫可以用 gevent 做异步,感觉比多线程要好
|
5
haozhang 2015-11-15 22:02:44 +08:00
有一种方法:找一个别人共享出来的代理池(里面有很多的服务器,也就是有很多的 ip 可以用)然后轮番的用不同的 ip 爬东西。
|
6
yzongyue 2015-11-15 22:09:12 +08:00
我是 gevent 加上 queue , 通过控制 put 的速度来限制爬虫的速度
|
8
HentaiMew 2015-11-15 22:32:41 +08:00
如果对应 WebService 有反爬措施的话,你要么不断的换 IP ,爬去过程中换 IP 高效的方式就是 5L 说的代理池,要么单线程甚至设置线程休息时间。
|
9
ming2281 2015-11-16 11:42:55 +08:00
世界有 3 种 bug: 你的 bug,我的 bug,多线程的 bug
:) |
10
janxin 2015-11-16 13:33:05 +08:00
走代理,你这个跟多线程什么的根本没关系
|