乐者为王

Do one thing, and do it well.

Nokogiri抓取页面URL含有中文参数的问题

使用Nokogiri抓取某网站的长江现货数据,被抓取页面的URL中含有中文参数,使用以下的代码抓取数据失败:

1
2
url = 'http://example.com/search.asp?type=长江有色&sort=asc'
doc = Nokogiri::HTML(open(url))

http://dingr.iteye.com/blog/647244 讲是因为浏览器给服务器发送参数的时候是经过编码的,按照该文的意思试着也给URL里的中文编了下码:

1
2
3
url = 'http://example.com/search.asp?type=长江有色&sort=asc'
url = URI.escape(url)
doc = Nokogiri::HTML(open(url))

结果还是抓取失败。查看URL的编码信息:

1
puts url.encoding  # 输出utf-8

网站页面采用的是GB2132编码,猜测网站后台处理数据时很有可能也是采用的GB2132。做个实验就清楚了,将URL转成GB2132后再编码:

1
2
3
4
url = 'http://example.com/search.asp?type=长江有色&sort=asc'
url = url.encode('gbk', 'utf-8')
url = URI.escape(url)
doc = Nokogiri::HTML(open(url))

发现果然OK了。

Comments