PhantomJS - 无法以Tor网络作为代理运行Phantomjs(Orchid作为Tor服务运行)

时间:2016-12-19 06:07:38

标签: java phantomjs tor

我实际上是在一个涉及从网站上抓取数据的宠物项目中。我写的应用程序完全是在java中。这个应用程序运行几个小时从网页上抓取数据。

正因为如此,我的IP多次在多个网站中被阻止。这就是我试图通过Tor网络访问网站的原因。

我已使用此Stackoverlow link中的代码从Orchid运行Tor服务。

所以在运行Tor服务后,我正在使用phantomjs来抓取网站..所以 我正在运行phantomjs phantomjs --proxy-type=socks5 --proxy=127.0.0.1:9150 script.js(因为服务在9150端口上运行.PhantomJS v2.1)

script.js包含

var page = new WebPage()
var fs = require('fs');
page.open("WEBSITE_ADDRESS", function() {
  page.evaluate(function() {
  });
});
page.onLoadFinished = function() {
    fs.write('FILE_LOCATION', page.content, 'w');
    phantom.exit();
};

现在问题就在于此。当我尝试运行phantomjs时,它会快速返回返回一个空的HTML文件。但是当我使用Tor.exe执行相同操作(即启动tor.exe文件,然后尝试使用上面指定的相同命令运行PhantomJS)时,它工作正常。它适用于https和http。但是在运行Orchid时,https和http都无效。

还有一件事是,当我尝试从java类(使用HttpURLConnection类)连接到一些网站时,调用启动服务的方法,我可以访问http和https网站(Tor服务正在工作因为每次访问whatismyip.com时我都会收到一个新的IP地址。

我没有使用像jsoup这样基于java的网页抓取库的原因是我试图从过度使用javascript中抓取数据的网站。因此,我总是得到一个不完整的页面,这与phantomJs不同。而且我也不想继续使用tor.exe来运行tor服务,因为它会使项目变得沉重。而且我也无法完全从java控制tor.exe

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

在设置PhantomJS与SOCKS(Tor)合作之后,我终于决定放弃那个exe了。这是一个已知的issue与Phantomjs

现在我使用JBrowserDriver进行网页抓取。这与Orchid Tor服务相得益彰。现在java中的所有东西,我都可以控制一切。

还有一点,JBrowserDriver在下载页面时使用多个线程,并且看起来比PhantomJS更快。

感谢所有人的努力。