
当爬虫遇上验证码?试试这招
最近帮朋友搞个价格监控脚本,用Ruby写了个爬虫,结果第二天就歇菜了——目标网站把咱IP给封了。这时候才想起代理IP这回事,就像吃火锅发现没蘸料,临时抱佛脚找解决方案。
Nokogiri这玩意儿怎么用?
先不说代理的事,咱得把基础工具搞明白。Nokogiri就是个HTML解析神器,安装起来简单:
gem install nokogiri
举个栗子,想抓某电商页面里的商品价格,代码大概长这样:
require 'nokogiri'
require 'open-uri'
html = URI.open('https://example.com/product').read
doc = Nokogiri::HTML(html)
price = doc.css('span.price-class').first.text
puts "当前价格:{price}"
注意css选择器要写对,就像配钥匙得对准齿槽。Chrome开发者工具里右键元素选Copy selector能省不少事。
IP被封咋整?代理IP来救场
重点来了!单IP高频访问就像半夜在小区里溜达十几次,保安不盯你盯谁?这时候就需要ipipgo的代理服务来打掩护。
这是改造后的脚本:
require 'nokogiri'
require 'open-uri'
proxy_list = [
'http://username:password@gateway.ipipgo.com:8080',
'http://username:password@gateway.ipipgo.com:8081'
]
5.times do |i|
begin
html = URI.open('https://target-site.com',
:proxy => proxy_list.sample,
'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0)'
).read
解析代码同上
break
rescue => e
puts "第{i+1}次尝试失败: {e.message}"
end
end
这里用了ipipgo提供的多个出口IP,每次随机选一个。好比打游击战,打一枪换个地方。
实战避坑指南
说几个新手常栽的跟头:
| 问题 | 解决方案 |
|---|---|
| SSL证书报错 | 在请求时加上ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE |
| 加载超时 | 设置read_timeout参数,建议10-30秒 |
| 封User-Agent | 用Faker gem随机生成浏览器指纹 |
你可能会问
Q:免费代理不能用吗?
A:免费代理就像公共厕所,谁都能用但容易堵。商用场景还是推荐ipipgo这种专业服务,IP池大还稳定。
Q:代理速度慢怎么办?
A:选地理位置近的节点,比如爬国内网站用华东机房。ipipgo的后台可以自选出口区域,这点挺方便。
Q:怎么判断代理是否生效?
A:在脚本里加个puts html[0..100]输出网页开头,看看内容对不对。或者用第三方网站检测出口IP。
升级玩法
遇到动态加载的数据咋办?可以配合selenium-webdriver,让代理设置更彻底:
require 'selenium-webdriver'
options = Selenium::WebDriver::Chrome::Options.new
options.add_argument('--proxy-server=http://gateway.ipipgo.com:8080')
driver = Selenium::WebDriver.for :chrome, options: options
driver.navigate.to "https://target-site.com"
这样连JS渲染的页面都能抓,相当于给爬虫装了个望远镜。
最后唠叨句,用代理IP就像开车系安全带,平时觉得麻烦,关键时刻能保命。特别是做商业爬虫的,别省这点预算,ipipgo的新用户有试用套餐,踩坑成本低很多。

