新手问题 [已解决] 用 ruby mechanize 抓取页面的 url,检查 xpath checker 可以匹配到 40 条连接,但在控制台执行后查看连接大小只有 6 个。

wdrsam · 2015年10月24日 · 最后由 wdrsam 回复于 2015年10月24日 · 1772 次阅读

太贱了,网站写的 charset 是 gb2312,实际用的是 gbk

我的 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 }

1 楼 已删除

#2 楼 @rei 我查过,也搜过啊,实在不知道问题出在哪里才来提问。提问的方式没对还是怎么?

不要把问题标记为 “紧急”, 即使对你而言的确如此。http://doc.zengrong.net/smart-questions/cn.html#urgent

如果得不到回答 http://doc.zengrong.net/smart-questions/cn.html#id266352

#4 楼 @rei 我更改了下,这样应该没什么大的问题了吧?还有什么问题请告诉我,谢谢。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号