【发布时间】:2018-03-15 10:06:02
【问题描述】:
我正在开发一个从各种网站上抓取优惠券代码的刮刀。我为此使用 python scrapy,我不得不为此使用启动浏览器,因为优惠券代码显示在弹出窗口中。
现在我想使用 tor 通过代理发送请求。但我无法在同一个 docker 容器上运行 Tor 和启动浏览器。
我在 docker 上运行 splash 为:
sudo docker run -p 8050:8050 scrapinghub/splash;
有些人说要在单独的 docker 容器上使用 tor 和 splash 并连接它们。但是,我无法找到解决方法。
我尝试在另一个 docker 容器上运行 tor:
sudo docker run -it -p 8118:8118 -p 9050:9050 -d dperson/torproxy
我正在发送这样的请求:
def start_requests(self):
url = 'http://www.example.com/some-url'
yield SplashRequest(
url,
self.parse,
endpoint='execute',
args={'lua_source': LUA_SCRIPT,
'wait': 2})
我的 LUA_SCRIPT 是
LUA_SCRIPT = """ function main(splash)
splash:on_request(function(request)
request:set_proxy{
host = "localhost",
port = 9050,
}
end)
splash.images_enabled = false
assert(splash:go{splash.args.url})
splash:wait(splash.args.wait)
return splash:html()
end"""
谁能建议我应该如何在 Tor 中使用 splash? (没有 tor,一切正常。)
【问题讨论】:
-
我建议你在不同的 docker 容器上运行它们。正如我所见,由于内存泄漏等原因,splash 总是会重新启动自己。您希望它们是独立的。
-
您可以使用
docker-compose运行docker 并以简单的方式连接它们,或者阅读以下教程如何运行它们并链接它们deis.com/blog/2016/connecting-docker-containers-1
标签: docker web-crawler tor scraper scrapy-splash