我的 ruby 版本是 2.0.0,在执行注释里的内容时终端有时会弹出
encoding error : input conversion failed due to input error, bytes 0x81 0x94 0xB6 0xC8
的错误,但解码不会有问题吧,所有子页面都是同一个编码格式。我以为可能会是请求速度过快被服务器拒绝了,所以加上了注释里的 sleep 2。但情况并不是我猜想的那样,匹配到 40 条 url,但实际在终端执行只显示出 6 条 url。我不知道该从哪里入手这个问题。从代码来看没有问题,在 firefox 里的 xpath checker 里也检查过,确实能匹配到 40 条 url。问题究竟出在哪个环节?
require 'rubygems'
require 'mechanize'
agent = Mechanize.new
url = "http://club.autohome.com.cn/jingxuan/0/"
REGX_MAIN = "//div[@class='wrap']/div[@class='choise-con']/ul[@class='content position']/li//p/a/@href"
REGX_SUB = "//div[@id='topic_detail_main']/div[@id='content']/div[@id='cont_main']/div[@id='maxwrap-maintopic']/div[@id='F0']/div[@class='conright fr']/div[@class='rconten']/div[@class='conttxt']/div[@class='w740']"
url_num = ARGV[0]
url = agent.get(url + url_num).search(REGX_MAIN)
# url.each do |link|
# url = agent.get(link).search(REGX_SUB)
# p url.text
# sleep 2
# p "======================================================"
# end
url.each { |_u| p _u.to_s }