在Ruby中更改IP地址

8

目前我正在电脑上运行一个网络爬虫程序。它占用的空间很大,不幸的是,由于这个原因,我的IP地址已经被该网站禁止访问。在Ruby中,或者简单地说,在任何一个简单的方式中,是否有一种方法可以更换我的IP地址,以便我可以重新进入这个网站进行爬取,或者我必须使用其他解决方案。这是403 Forbidden错误,值得一提的是,我正在使用nokogiri和ruby作为用户代理,谢谢。


2
你的IP地址与Ruby无关。重新启动你的路由器/调制解调器通常会导致获得新的IP地址。Tor也可能有所帮助。 - Stefan
2
Ruby只使用您的网络接口,您不能简单地更改您的公共IP。 - Stefan
哦,好的,谢谢你的帮助。可能还有其他方法可以解决这个问题吗? - user2109354
如果我的计算正确,我要遍历一个网站大约有6万个页面,而且如果可能的话,我还打算继续遍历更多。 这就是该程序之所以庞大的原因,也是为什么我的IP被禁止访问该网站的原因。 程序本身并不是非常大,但我正在抓取和访问的规模是巨大的。 - user2109354
3
刮擦时应轻柔,设置程序定时小睡一会儿。 - fartagaintuxedo
显示剩余2条评论
1个回答

14

你可以通过代理连接,如果你有一份代理地址列表,那么你可以告诉 Ruby 每 x 分钟更改一次代理,这将导致网站认为你的 IP 发生了变化。下面是一个使用代理来爬取 Google 搜索结果的代码示例,如果想要使用代理列表,只需要稍微修改一下代码即可。

require 'rubygems'
require 'mechanize'

agent = Mechanize.new
agent.set_proxy '78.186.178.153', 8080
page = agent.get('http://www.google.com/')

google_form = page.form('f')
google_form.q = 'new york city council'

page = agent.submit(google_form, google_form.buttons.first)

page.links.each do |link|
    if link.href.to_s =~/url.q/
        str=link.href.to_s
        strList=str.split(%r{=|&}) 
        url=strList[1] 
        puts url
    end 
end

哇,真的太棒了,非常感谢,我开始觉得自己完蛋了,这太完美了。 - user2109354
1
你有没有推荐好的代理服务器可以使用这种方法?我对代理服务没有任何经验。 - E.E.33

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接