【问题标题】:PhantomJS - Unable to run Phantomjs with Tor network as proxy (Orchid is running as the Tor service)PhantomJS - 无法以 Tor 网络作为代理运行 Phantomjs(Orchid 作为 Tor 服务运行)
【发布时间】:2016-12-19 06:07:37
【问题描述】:

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

正因为如此,我的IP多次被多个网站屏蔽。这就是我尝试通过 Tor 网络访问网站的原因。

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

所以在运行 Tor 服务之后,我正在使用 phantomjs 来抓取网站.. 所以 我以phantomjs --proxy-type=socks5 --proxy=127.0.0.1:9150 script.js 的身份运行phantomjs(因为tor 服务在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 都不起作用。

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

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

请帮我解决这个问题。

【问题讨论】:

    标签: java phantomjs tor


    【解决方案1】:

    在设置 PhantomJS 以与 SOCKS(Tor) 一起工作之后,我终于决定放弃那个 exe。它是一个已知的issue 和 Phantomjs

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

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

    感谢大家的努力。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-07
      • 2010-12-30
      • 1970-01-01
      • 2015-04-23
      • 1970-01-01
      • 2015-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多