最近项目中需要写爬虫,需要爬openrice,其中有一些tips需要记录一下。
tor and polipo
Tor
tor是一个socks5代理工具,可以实现匿名访问网页,本质其实是利用了分布在世界各地的一些肉机做请求转发。
tor有两部分,tor和ControlPort,他们都需要在tor/config下手动配置:
- tor,一般绑定在9050端口,socks5代理服务器,如果在mac下,可以通过brew下载并通过brew services进行管理
- ControlPort,一般绑定在9051端口,用来管理本地的tor,在python下用TorCtl包来操作。开启前要通过tor –keygen设置passphrase
在linux下可以用lsof -i:port-num来查看有没有正确开启这两个服务。
可以通过Control向tor发送不同的signal的方式来实现对tor的管理,例如获取新ip可以
1 | def getNewIp(): |
Polipo
由于tor是通过sock5代理的,但实际使用的很多python库只支持http/https代理,例如requests、urllib3等,这样需要一个web服务器来进行转化。polipo就是这样的工具。
mac端可以通过brew来下载和管理polipo,但polipo的config不会自动生成,需要我手动去/usr/local/etc下mkdir polipo文件并自己写config,我的config如下
1 | proxyAddress = "::0" |
这里一个坑是我刚开始在polipo的config里没有写proxyaddress = “0.0.0.0”,会有很多问题
polipo默认绑定端口是8123,如果成功开启,在python可以通过
1 | proxy_manager = urllib3.ProxyManager( |
proxy_manager可以正常访问web页面,但是速度较慢。
Pyhusky
可以通过husky的map来运行下载任务,提高分布式效率。
首先需要在本地启动husky的master和daemon任务(目前遗留了一个问题:每个任务只能跑一次,第二次跑不了?),然后在python通过
1 | env.pyhusky_start('127.0.0.1', 20000) |
来运行的,注意这里有一个坑是parallelize分成几份会由master config的 [worker] 下的配置决定的,所以如果发现本机只跑了所有任务的一半或三分之一,就去check一下husky的master config有无问题。