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头部信息的一个数组

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



作者: gertrude


关于curl返回数据乱码的问题解决方法

今天需要爬某个网站的数据,chrome打开开发者工具顺利的找到API,然后拿出curl大法,走起! 首先,模拟登录,顺利的拿到数据,但是返回的数据让我懵逼了。 在浏览器开发者工具看到的是正常的数据,但...
  • panyox
  • panyox
  • 2017年04月17日 15:33
  • 3474

C++使用curl库发送https请求中文乱码问题

//在数据头设置字符集为UTF-8,解决中文乱码问题 struct curl_slist *head = NULL; head = curl_slist_append(head, ...
  • hk627989388
  • hk627989388
  • 2016年11月09日 12:21
  • 4130

php使用curl post 发送url 并解决中文乱码问题

这个问题困扰我几天了,发送的指定网址的url参数,中文总是乱码,指定网址是utf8编码的,我发送的也是utf8编码的。但是还是乱码,开始用的file_get_contents,后来换成curl并在ph...
  • Ashelyhss
  • Ashelyhss
  • 2012年08月28日 17:14
  • 56394

关于使用libcurl下载网页源码中文乱码问题!

近日使用了libcurl这个库,功能强大、使用方便就不多说了。在使用过程中还是遇到挺多的问题的,无奈libcurl开发文档(貌似没有,index.html也没有错误解决部分)实在看不懂,因此为一些小问...
  • malihong1
  • malihong1
  • 2016年01月08日 10:37
  • 1608

libcurl,CURLOPT_POSTFIELDS的内容变乱码或少一字节

今天写了一段代码调用libcurl库的,post的数据都会变成乱码,或者少一字节后来发现实变量有效范围的问题.  错误代码: //...... if( NULL!=pszHttpBody ...
  • chenguangxing3
  • chenguangxing3
  • 2014年03月24日 21:48
  • 3295

curl获取网页内容出现乱码或为空的解决方案,另附curl_getinfo函数解析

关于使用curl抓取网页碰到的小问题以及解决方案。另附一些curl_getinfo的小知识点。谢谢。...
  • LJFPHP
  • LJFPHP
  • 2017年07月15日 14:14
  • 2410

使用Curl进行抓取远程内容时url中文编码问题

PHP中对于URL进行编码,可以使用 urlencode() 或者 rawurlencode(),二者的区别是前者把空格编码为 '+',而后者把空格编码为 '%20',不过应该注意的是,在编码时应该只...
  • aoyoo111
  • aoyoo111
  • 2013年08月03日 22:45
  • 1221

Linux_Linux Shell 用curl 发送请求

linux curl是通过url语法在命令行下上传或下载文件的工具软件,它支持http,https,ftp,ftps,telnet等多种协议,常被用来抓取网页和监控Web服务器状态。 一、Linux ...
  • u010003835
  • u010003835
  • 2017年04月06日 22:00
  • 2585

Ubuntu14.04 用curl抓取页面乱码

1.是用curl抓取的数据是用类似gzip压缩后的数据导致的乱码。 乱码:curl www.1ting.com |more 乱码:curl -H "Accept-Encoding: gzip"ww...
  • dll0516
  • dll0516
  • 2016年08月30日 08:30
  • 205

用file_get_contents抓取网页乱码的2种解决方式

今天自己在写一个程序,抓取别人的网页,之前公司有些功能也会需要,但是今天在抓取网页的时候发现了一个问题 用file_get_contents抓取网页发现如截图所示的乱码情况 于是用转换编码 $con...
  • a454213722
  • a454213722
  • 2016年02月10日 12:00
  • 6607
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Ubuntu14.04 用curl抓取页面乱码
举报原因:
原因补充:

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