提前感谢你们所有人的耐心和好意。我刚接触docker,很难使用它来完成我的任务。请让我知道,如果我张贴了任何错误,而不是投票。
我正在研究一个爬虫项目,并尝试使用docker + selenium +多个代理。这是我理想的工作流程:一台机器包含多个容器,一个爬虫(Selenium)脚本在一个容器中运行,每个脚本将完成“抓取和渲染网站->提取信息->更新本地数据库”的过程。
我知道如何在本地更改selenium中的代理。以下是我的脚本的一部分:
def get_driver():
driver = getattr(threadLocal, 'driver', None)
if driver is None:
chromeOptions = webdriver.ChromeOptions()
chromeOptions.add_argument("--headless")
chromeOptions.add_argument('--proxy-server=http://pubproxy.com/api/proxy?format=txt')
prefs = {
"profile.managed_default_content_settings.images": 2,
'disk-cache-size': 4096,
'permissions.default.stylesheet': 2
}
chromeOptions.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(chrome_options=chromeOptions)
setattr(threadLocal, "driver", driver)
return driver我可以在本地使用代理完成"fetch and render website -> extract information -> update local database“过程,但我不确定是否可以将其部署在多个docker容器上。
我查看了这个帖子:How to configure special proxy settings for a remote selenium webdrive with python?。但我仍然不知道是否应该更改docker设置中的代理,因为我看到了这样一个示例:
from selenium import webdriver
chrome = webdriver.Remote( command_executor='http://localhost:4444/wd/hub', desired_capabilities=DesiredCapabilities.CHROME )如果我在docker设置中更改了IP,是否意味着我需要停止并重复打开它?(这对于爬虫来说不是很理想?)
我可以将配置参数传递给docker chrome selenium webdriver吗?或者我需要在构建docker容器之前预先配置代理设置吗?
任何关于实现/优化此工作流程的提示都将不胜感激。我正在看官方的docker教程,结果迷路了。真心希望有人能帮助我走上正确的方向。
发布于 2019-10-19 03:56:13
您可以将代理传递给函数,例如get_driver(proxy)
你可以创建一个简单的函数,从文件中的给定代理列表中选择,该文件与你的容器共享一个volume,你可以在任何时候编辑它。
def get_driver_with_random_proxy():
with open('proxy_file.txt') as file:
proxies_list = file.read().split('\n')
random_proxy = random.choice(proxies_list)
return get_driver(random_proxy)https://stackoverflow.com/questions/58457108
复制相似问题