问题:终端使用curl请求url时返回为空可能是网站反爬机制限制为windows 或mac端才能进行数据获取。
解法:可通过设置头文件解决。
curl -a aa.html “https://www.ip138.com/iplookup.asp?ip=58.217.246.123&action=2” -H ‘User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36’ -H ‘Accept-Language: zh-CN,zh;q=0.9,en;q=0.8’
1.是用curl抓取的数据是用类似gzip压缩后的数据导致的乱码。
乱码:curl www.genecode.com |more
乱码:curl -H "Accept-Encoding: gzip"www.1ting.com | more
不乱码:curl -H "Accept-Encoding: gzip"www.1ting.com | gunzip | more
小总:
也就是说在curl后面加上Accept-Encoding:gzip,再用gunzip解压缩,则基本上可以保存数据不乱码。
2.GBK或者UTF8汉字之类的乱码
iconv命令是运行于linux平台的文件编码装换工具。当我们在linux系统shell下通过curl命令或者wget命令获取一个网页的源代码,当网页的编码与当前操作系统坏境的设置的编码不同时,就会发现网页中有很多乱码。如在网页"meta"标签"charset"属性值设置为"gb2312"的http://www.baidu.com百度首页,在系统坏境变量" L A N G " 值为 " e n U S . U T F − 8 " 的 l i n u x 系统即会产生中文乱码现象。这时我们可以尝试使用 i c o n v 命令进行编码装换,让中文不在是乱码。如下命令是处理百度在系统坏境变量 " LANG"值为"en_US.UTF-8"的linux系统即会产生中文乱码现象。这时我们可以尝试使用iconv命令进行编码装换,让中文不在是乱码。如下命令是处理百度在系统坏境变量" LANG"值为"enUS.UTF−8"的linux系统即会产生中文乱码现象。这时我们可以尝试使用iconv命令进行编码装换,让中文不在是乱码。如下命令是处理百度在系统坏境变量"LANG"值为"en_US.UTF-8"的linux系统乱码的问题的解决方案之一:
curl “https://www.ip138.com/iplookup.asp?ip=58.217.246.123&action=2” -H ‘User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36’ -H ‘Accept-Language: zh-CN,zh;q=0.9,en;q=0.8’|iconv -fgb2312 -t utf-8 > aa.html
当然,你也通过改变系统坏境变量与百度首页的"charset"值一致,也可以解决此乱码问题,如下命令:
set LANG=“gb2312”
export LANG
curl http://www.google.com
iconv命令的详细语法:
iconv [选项…] [文件…]
选项:
-f 输入编码 (兼容中文通常为gb18030或gb2312)
-t 输出编码
-l 列出所有已知的编码
-o 输出文件