ip 池
- 使用tor,squid作为缓存,避免重复请求
- 使用ip代理
- 免费的ip池 高可用IP代理池 | haipproxy
- 自建adsl服务器
tor搭建
-
brew install tor Mac下安装洋葱皮(Tor)并结合SS使用 - 吕滔博客
-
配置torcc
copy /etc/tor/torrc.example /etc/tor/torrc
-
修改配置, tor --hash-password 'password'生成密码
-
添加 SOCKS5Proxy 127.0.0.1:1080,可以让tor借助shadowsocks建立链接,要么GFW会墙掉tor的很多链接,导致建立链接很慢,如何在墙内使用Tor | 圣僧
-
动态更新ip, bash -c "pip install -U requests[socks]" 安装socks
import time import socket import socks import requests from stem import Signal from stem.control import Controller controller = Controller.from_port(port=9051) def connectTor(): socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050, True) socket.socket = socks.socksocket def renew_tor(): controller.authenticate() controller.signal(Signal.NEWNYM) def showmyip(): r = requests.get('http://icanhazip.com/') ip_address = r.text.strip() print(ip_address) for i in range(10): renew_tor() connectTor() showmyip() time.sleep(10)
-
How to make python Requests work via socks proxy - Stack Overflow
squid
- 安装 brew install squid
- 安装squidmain
- 使用squidMain Mac OSX环境下使用Squid实现Web Caching - 比格·巴塔
- 代理配置 Squid 整合 Privoxy 與 Tor 架設匿名代理伺服器教學 - G. T. Wang
- scrapy 请求 -》 squid -》 privoxy -》tor
haipproxy
-
由于GFW的原因,某些网站需要通过科学上网才能进行访问和采集,如果用户无法访问墙外的网站,请将rules.py task_queue为 SPIDER_GFW_TASK和SPIDER_AJAX_GFW_TASK的任务enable属性设置为0或者启动爬虫的时候指定爬虫类型为common和 ajax
python crawler_booter.py –usage crawler common ajax
-
先启动代理抓取爬虫和定时任务调度器(这里我只启动了common这个代理抓取任务)
python crawler_booter.py --usage crawler common ajax
python scheduler_booter.py --usage crawler common ajax
再启动zhihu和init校验器和定时任务调度器, init没有调度任务
python crawler_booter.py --usage validator init http https
python scheduler_booter.py --usage validator http https
调用代理IP客户端实现数据采集,参考run.sh。init校验器属于特殊校验器,无论单机还是分布式部署haipproxy的时候,都必须启动至少一个init校验器实例。建议部署足够多的init校验器 实例,因为通过实践发现,一个init校验器往往不够用。init校验器并没有相应的定时任务调度,它的资源获取是代理IP爬虫直接操作的
-
python客户端调用
from client.py_cli import ProxyFetcher args = dict(host='127.0.0.1', port=6379, password='123456', db=0) # 这里`zhihu`的意思是,去和`zhihu`相关的代理ip校验队列中获取ip # 这么做的原因是同一个代理IP对不同网站代理效果不同 fetcher = ProxyFetcher('zhihu', strategy='greedy', redis_args=args) # 获取一个可用代理 print(fetcher.get_proxy()) # 获取可用代理列表 print(fetcher.get_proxies()) # or print(fetcher.pool)
-
scrapy-splash 安装
docker run -p 8050:8050 -d --name mysplash --restart=always scrapinghub/splash
反爬虫
- 浅谈Python网络爬虫 - FreeBuf互联网安全新媒体平台
- 设置agent,referer
- 反反爬虫 luyishisi/Anti-Anti-Spider
网友评论