• 爬虫爬数据时,post数据乱码解决办法


      最近在写一个爬虫,目标网站是:http://zx.bjmemc.com.cn/,可能是为了防止被爬取数据,它给自身数据加了密。用谷歌自带的抓包工具也不能捕获到数据。于是下了Fiddler。
        Fiddler的爬取结果如下:

        可见,除了头信息之外,下面的数据信息显示成了乱码。这样就不能用程序模拟浏览器发送数据了。
        解决办法之一就是获取此字符串的十六进制编码。将Fiddler切换至Hexview,如下图所示:

        其中蓝色部分是header头信息,黑色字体就是传送的数据。你还可以右键-》取消勾选show header,这样显示的便都是数据信息。
        我们程序中可以将这个十六进制字符长串转化成字符串,然后发送到web服务器中。
        转化的程序如下所示:

    [csharp] view plaincopy在CODE上查看代码片派生到我的代码片
    1. public static byte[] GetByteArray(string frame)  
    2. {  
    3.     byte[] buffer = new byte[frame.Length / 2];    //注意每两个十六进制字符代表一个二进制编码  
    4.     for (int i = 0; i < frame.Length / 2; i++)  
    5.     {  
    6.         int t = GetData(frame[2 * i]) * 16 + GetData(frame[2 * i + 1]);  
    7.         buffer[i] = (byte)t;  
    8.      }  
    9.      return buffer;  
    10. }  
    11.    
    12. static int GetData(char p)    //获得ASCII编码  
    13. {  
    14.     if (p <= '9' && p >= '0')  
    15.     {  
    16.         return p - '0';  
    17.     }  
    18.     else  
    19.     {  
    20.         return p - 'a' + 10;  
    21.     }  
    22. }  

        1、先选中你要导出的十六进制字符长串-》右键-》save selected bytes-》到一文件中。    但是遇到一个问题就是,如何将Fiddler的十六进制字符串拷贝出来,若手动抄写,很不现实,一来太长,二来怕错。可以借助Notepad++或者UltraEdit转化过来。本人用Notepad++实验成功:

        2、用Notepad++打开此文件,发现仍然是乱码
        3、下载十六进制显示插件下载:HexEditor_0_9_5_UNI_dll.zip
        4、解压后将HexEditor.dll文件放在Notepad++安装目录的plugins目录下,重启notepad++

        5、再次用Notepad++打开文件,plugins->HEX-Editor->View in HEX,显示如下:

       6、选中你要复制的十六进制字符串,复制,然后新建文本,粘贴,就是一个带有空格的字符串了。去除空格和换行即可。
        7、有一种快速去除空格的方法,选中一个空格,ctrl+f,切换到替换标签,然后点击替换所有按钮,这样将所有的空格都替换成了空字符串,也就删除了所有空格。

  • 相关阅读:
    倒计时2(小于0时的格式)
    日期 Date()
    倒计时5(超过时间为0:0:0)
    倒计时4
    倒计时3
    Lucene_solr
    Solr与tomcat搭建(搭建好)
    SSM(Spring-SpringMvc-Mybatis)练习
    SpringMvc
    Mybatis(使用)与Spring整合
  • 原文地址:https://www.cnblogs.com/zibaohun/p/4106645.html
Copyright © 2020-2023  润新知