【问题标题】:How to use a proxy with OpenURI如何在 OpenURI 中使用代理
【发布时间】:2017-03-16 08:55:29
【问题描述】:

我正在尝试将 OpenURI 与代理和用户代理字符串一起使用。我购买了代理列表以用于我的网络爬虫。

这是一个例子:

@src = open(url, "User-Agent"=> @agent,
  :proxy_http_basic_authentication => [
     "http://185.118.66.88:16506", "user", "password"]).read

导致:

!!! 502 Bad Gateway

我有一个免费的代理并使用它并且它工作正常,所以我认为问题可能出在用户名或密码上。

我尝试了从向我出售代理列表的公司获得的用户名和密码。

如果我尝试使用 Nokogiri,我会收到错误:

@src = Nokogiri::HTML(open(
   "http://google.com",
   :proxy_http_basic_authentication => [
     "http://#{@proxy}", "user", "password"]

 syntax error, unexpected keyword_rescue, expecting ')'
    rescue Exception => e

我想创建一个类并将其用于网络抓取,例如 Google。它很容易禁止网络抓取工具,因此我将为每个请求更改用户代理和代理。

【问题讨论】:

  • 这不是 Nokogiri 问题,因为 Nokogiri 并不关心 HTML 来自何处。它只读取 OpenURI 传递给它的流。问题在于您通过代理和 OpenURI 连接到终端主机。
  • 请阅读“How to Ask”和链接页面。链接页面将帮助您了解如何使用 Stack Overflow。此外,“minimal reproducible example”和链接页面将帮助您编写更有用的问题。您的代码示例在语法上不正确,也没有显示 rescue 在您的代码中的位置,因此我们无法帮助诊断。
  • 你不能编写一个通用的刮板来在多个网站上使用。网站之间的 HTML 不够一致,无法做到这一点。 Google 不会被更改代理或用户代理设置所欺骗;他们非常了解自动抓取的工作原理。
  • 不要以使现有答案无效的方式更改您的问题。如果您获得新信息并需要提出新问题,您应该......好吧......创建一个新问题。
  • @piet.t 好的,我不会再更改问题文本了。

标签: ruby proxy user-agent open-uri


【解决方案1】:

我希望您从目标站点获得 502。

require 'open-uri'
@src = open("http://google.com",
            "User-Agent"=> 'Agent',
            proxy_http_basic_authentication: [
              "http://185.118.66.88:16506", "user", "password"]).read

#⇒ OpenURI::HTTPError: 407 Proxy Authentication Required

这意味着一切都按预期进行。您对 Nokogiri 的尝试需要两个右括号才能工作,但您最好从简单的 open 开始工作,但 Nokogiri 仍然依赖它。

【讨论】:

  • 好的,但我们先谈谈 open-url。第二。您能否与用户代理和代理分享 Nokogiri 的工作示例(如果代理会询问用户名和密码,但也不好)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-20
  • 1970-01-01
  • 2021-09-29
  • 2021-09-10
  • 2014-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多