网络抓取:如何选择代理

时间:2017-03-14 23:59:23

标签: java heroku proxy web-scraping phantomjs

我想尽可能使用Web scraper编写可重用的文件。我会把它写在Selenium + PhantomJS上。 PhantomJS将使用IP池(代理)。有一大堆免费代理,for example

我如何在运行时选择特定网址的最佳代理?我认为最快的是一个不会被目标资源阻止的代理。

Workarround

我在Heroku上部署了我最简单的应用程序。该应用程序提供一些HTML内容。我使用了不同的代理(响应时间<300毫秒)而不是151.252.120.177:8080(参见下面的代码),并注意到它们中的大多数都无法在15秒超时中解析最简单的html。其中一些(甚至更慢)在一秒钟内检索到内容。 为什么有些代理无法访问我的内容?他们是否被Heroku列入黑名单?

    DesiredCapabilities caps = new DesiredCapabilities();
    caps.setJavascriptEnabled(true);        
    caps.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, "drivers/phantomjs");

    ArrayList<String> cliArgsCap = new ArrayList<String>();
    cliArgsCap.add("--proxy=151.252.120.177:8080");
    cliArgsCap.add("--proxy-type=socks");
    caps.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, cliArgsCap);

    WebDriver driver = new PhantomJSDriver(caps);
    driver.get(REMOTE_URL);
    WebDriverWait wait = new WebDriverWait(driver, 15);
    WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.className("btn-success")));
    element.click();
    driver.quit();

1 个答案:

答案 0 :(得分:-2)

如果您只需要一个刮刀结果,您可以使用具有代理支持的免费刮刀。试试这个http://datathief.verych.ru/