zoukankan      html  css  js  c++  java
  • 获取网页乱码

    1.是用curl抓取的数据是用类似gzip压缩后的数据导致的乱码。

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

    不乱码:curl www.55wd.com |more
    乱码:curl -H "Accept-Encoding: gzip"www.55wd.com | more
    不乱码:curl -H "Accept-Encoding: gzip"www.55wd.com | gunzip | more

    下面的a,b解释的是www.wode007.com,c,d解释是的www.55wd.com

    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解压缩,则基本上可以保存数据不乱码。

    素材公社https://www.wode007.com/sites/73209.html 爱图网https://www.wode007.com/sites/73208.html

    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系统乱码的问题的解决方案之一:

    curl http://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报文体。关闭HEADER和NOBODY

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

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

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

    前者是设置HTTP头部信息的一个数组
    后者是将头文件的信息以数据流的方式输出
     
  • 相关阅读:
    magent + memcached 集群测试
    SQL Server 2000/2005检测存储过程名是否存在,存在删除
    ASP.NET在线用户列表精确版——解决用户意外退出在线列表无法及时更新问题
    使用asp.net/c# ajax 乱码的解决办法
    清空删除mssql数据库日志原文网址:http://admin.88443.net/article.
    net2.0下的简繁转换
    创建和注册自定义 httpModules 模块
    监控用户是否关闭浏览器
    Asp.net(Ajax)表单验证 函数包
    IE自带的网页过渡特效
  • 原文地址:https://www.cnblogs.com/ypppt/p/13353761.html
Copyright © 2011-2022 走看看