Ubuntu14.04 用curl抓取页面乱码

转载 2016年08月30日 08:30:59

1.是用curl抓取的数据是用类似gzip压缩后的数据导致的乱码。
乱码:curl www.1ting.com |more
乱码:curl -H "Accept-Encoding: gzip"www.1ting.com | more
不乱码:curl -H "Accept-Encoding: gzip"www.1ting.com | gunzip | more

不乱码:curl www.1616.net |more
乱码:curl -H "Accept-Encoding: gzip"www.1616.net | more
不乱码:curl -H "Accept-Encoding: gzip"www.1616.net | gunzip | more

下面的a,b解释的是www.1ting.com,c,d解释是的www.1616.net
a.某个url,如果用不加任何选项的curl命令抓取后乱码,在curl后面加上Accept-Encoding:gzip,后面不加gunzip,则抓取的数据会乱码。
b.某个url,如果用不加任何选项的curl命令抓取后乱码,在curl后面加上Accept-Encoding:gzip,后面加上gunzip,则抓取的数据不会乱码。

c.某个url,如果用不加任何选项的curl命令抓取后不乱码,在curl后面加上Accept-Encoding:gzip,后面不加gunzip,则抓取的数据会乱码。
d.某个url,如果用不加任何选项的curl命令抓取后不乱码,在curl后面加上Accept-Encoding:gzip,后面加上gunzip,则抓取的数据不会乱码。

小总:
也就是说在curl后面加上Accept-Encoding:gzip,再用gunzip解压缩,则基本上可以保存数据不乱码

2.GBK或者UTF8汉字之类的乱码

iconv命令是运行于linux平台的文件编码装换工具。当我们在linux系统shell下通过curl命令或者wget命令获取一个网页的源代码,当网页的编码与当前操作系统坏境的设置的编码不同时,就会发现网页中有很多乱码。如在网页"meta"标签"charset"属性值设置为"gb2312"的http://www.baidu.com百度首页,在系统坏境变量"$LANG"值为"en_US.UTF-8"的linux系统即会产生中文乱码现象。这时我们可以尝试使用iconv命令进行编码装换,让中文不在是乱码。如下命令是处理百度在系统坏境变量"$LANG"值为"en_US.UTF-8"的linux系统乱码的问题的解决方案之一:

curlhttp://www.baidu.com|iconv -fgb2312 -t utf-8

当然,你也通过改变系统坏境变量与百度首页的"charset"值一致,也可以解决此乱码问题,如下命令:

set LANG="gb2312"

export LANG

curl http://www.baidu.com

iconv命令的详细语法:

iconv [选项..] [文件..]
选项:
-f 输入编码
-t 输出编码
-l 列出所有已知的编码
-o 输出文件

 

 

对比采用PHP CURL库的POST GETHEADER三种方法之间的差异

比较POST GETHEADER这三种方法的区别:

参数

POST

GET

HEADER

CURLOPT_URL

CURLOPT_POST

开启

关闭

关闭

CURLOPT_HTTPHEADER

如果有$header,则开启

如果有$header,则开启

如果有$header,则开启

CURLOPT_HEADER

False

False

True

CURLOPT_NOBODY

false

False

true

CURLOPT_POSTFILEDS

True

false

false

从上表中可以看出:

POST方法:开启POST连接,然后发送POST报文体。关闭HEADERNOBODY

GET方法:关闭POST相关的选项,关闭NOBODYHEADER,仅仅只是开启curlopt_httpheader

HEADER方法:开启HEADERNOBODY,关闭POST相关的选项。

应该说上述三种方法,一个明显的区别是,箱采用什么方法的时候,就开启对应的CURL选项。

CURL_HTTPHEADERCUROPT_HEADER的区别:

前者是设置HTTP头部信息的一个数组

后者是将头文件的信息以数据流的方式输出



作者:


相关文章推荐

nagios插件之监控f5主备状态(ssh实现)

访问f5-1调用脚本1 #!/usr/bin/expect -f #set port 22 set user admin set host 114.xx.xx.1 set password bmw@...
  • ccjsj1
  • ccjsj1
  • 2014年08月24日 11:26
  • 724

JSON详细了解-(重在理解,不在手把手教你怎么用)

JSON也许你在用,或者你已经用很久了,但是你不一定知道他到底是什么,那么就来好好了解一下吧,不管你是 在安卓开发用到的还是在web开发用到的(好像web开发用到的才是json最开始效劳的地方,安卓开...

Ubuntu 14.04 64bit上curl-7.37源码包中的sample 源码示例研究

libcurl 在curl-7.37.1/docs/examples/目录下有很多例子,大致有100个左右吧,对我们使用C/C++开发很有帮助: 如何批量编译并运行这些例子呢?我首先是查看该目录下...
  • tao_627
  • tao_627
  • 2014年09月13日 13:42
  • 1029

ubuntu 14.04 解决JavaMelody 图片中文乱码

从windows系统中,copy了MSYH.TTC和MSYHBD.TTC 2个文件到 服务器的%JAVA_HOME%\jre\lib\fonts\fallback 目录中, (如果fallbac...

[转载]Ubuntu14.04系统中下载的中文文件名乱码解决办法

一、乱码的样子类似:°²Àï¿ü ÒÁ¸ñÀ³Ï£ÑÇ˹,°²Àï¿ü ÒÁ¸ñÀ³Ï£ÑÇ˹这种乱码称为Gedit中文乱码打开部分Windows下的txt文本文件的时候,中文显示为乱码。但是自己...

fbterm:支持中文显示的控制台-解决ubuntu14.04中文乱码

fbterm:支持中文显示的控制台 Fbterm提供了一个快速的终端仿真器,它直接运行在你的系统中的帧缓冲(framebuffer)之上。如果在控制台(Ctrl+Alt+Fn)下显示中文乱码,则可以...

flask下博客系统输入中文乱码问题(ubuntu14.04+mysql5.5.46)

在flask博客中输入中文,sumbit之后显示?????乱码原因:mysql数据库中编码方式没有设置为utf8,默认为latin总结: 网上搜资料之前要先回顾你做了什么导致的问题,先自己排除,再去...

Ubuntu14.04安装中文输入法以及解决Gedit中文乱码问题

1 设置中文显示环境 1. 打开System Settings 2. 打开Personal-> Language Support. 会弹出如下对话框,提示你“语言支持没安装完...

Ubuntu 14.04上解决zip格式文件解压文件名乱码问题

大家在使用ubuntu(linux)系统中难免要解压一些zip结尾的压缩文件,由于Windows与ubuntu操作系统的格式问题,所以使用unzip时难免解压乱码问题, 解决方法: 需要再安装...

Linux Ubuntu Server 14.04 LTS 处理中文乱码及vi编辑器操作概要

首先在网上搜了一些资料,说是暂时无法解决。 但在安装的时候选择的是中文安装,因此在命令页面显示的是方格的乱码。 既然是Linux 服务版,我想就没必要去安装中文包了吧,决定换回英语显示。 1.使用...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Ubuntu14.04 用curl抓取页面乱码
举报原因:
原因补充:

(最多只允许输入30个字)