admin 管理员组

文章数量: 887018

自我介绍:不是计算机专业,甚至不沾边。长期上网对网页制作什么的只有一丁点皮毛知识。有一些爬虫技能,但仅限于从网页获取json并解析,类似的。

使用设备:

设备名称    DESKTOP-53730H2
处理器    12th Gen Intel(R) Core(TM) i7-12700   2.10 GHz
机带 RAM    32.0 GB (31.3 GB 可用)
设备 ID    F9F3E092-CF01-4862-9DEC-00C1A4C39D78
产品 ID    00325-81388-30062-AAOEM
系统类型    64 位操作系统, 基于 x64 的处理器
笔和触控    没有可用于此显示器的笔或触控输入
版本    Windows 11 家庭版
版本    21H2
安装日期    ‎2022/‎5/‎11
操作系统版本    22000.2538
体验    Windows 功能体验包 1000.22001.1000.0

背景叙述:我本来打算爬取全国水雨情信息,发现我的电脑打开这个网页看到的json是一些生僻字,但是网页本身显示没问题,如下图。

解决一:

确认json存储格式为utf-8,ensure_ascii=False;存储的json依旧是乱码。

def get_tides (date):
    url = 'http://xxfb.mwr/OTMuhovshHolkdc/OTMbmdvbjQjosq'
    headers = {
        "Accept": "application/json, text/javascript, */*; q=0.01",
        "Content-Type": "application/json;charset=UTF-8",
        "Cookie": "__FT10000066=2024-3-16-13-46-27; __NRU10000066=1710567987611; __RT10000066=2024-3-16-13-46-27",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0",
        "X-Requested-With": "XMLHttpRequest",
    }
    retries = 0
    while retries < 5:
        try:
            r = requests.post(url, headers=headers)
            r.raise_for_status()
            data = r.json()
            with open(f"{date.strftime('%Y-%m-%d')}.json", "w", encoding="utf-8") as f:
                json.dump(data, f, ensure_ascii=False)
            break
        except (requests.exceptions.RequestException, json.JSONDecodeError) as e:
            retries += 1
            print(e)

get_tides(datetime.now())
font_file_uel = 'http://xxfb.mwr/ttf/aLVP5AhmbQ_1710586649773.eot?#iefix'
ttf = TTFont(io.BytesIO(requests.get(font_file_uel).content))
# ttf.save('sqsj.ttf')
ttf.saveXML('sqsj.xml')

于是天真的我以为这个网页被反爬了,就开始找字体库,并准备解析这个字体库,然后把json还原。后来进行到准备写字典,查看 ttf 的时候发现字太多了,根本统计不完,遂作罢。

解决二:

找了一个爬虫的老师帮我写爬虫代码,老师把代码给我后,我一看很简单,就是获取json然后解析,于是运行了。运行后发现得到的excel文件里的信息还是乱码。但是老师说他那边的文件是对的,他的网站打开也是对的。

老师获取的数据和网页截图:

所以我就很纳闷。。

解决三:

以为是自己访问过于频繁被限IP了,就远程了同学的电脑,同学跟我不在一个城市,用她的电脑查看了这个网页全国水雨情信息,发现同学的电脑看到的json也全是生僻字。

解决四:

以为是我电脑字体的问题,就修改了电脑--控制--时钟和区域--管理--更改系统区域设置--Beta版打勾--确认,发现没用。

我开始了漫长的找原因之旅。。

1)用IE模式打开了原网站,发现整个网页的主要内容全是乱码;

2)修改了网页编码为UTF-8,依旧是乱码;

3)确认了网页和json的编码格式的确是 UTF-8;

所以到底是为什么。。

我开始查资料,觉得是网页制作的bug。。但我毕竟不是专业的。。所以有没有 大神 能帮我看看这究竟是怎么回事

疑惑的点:

1. 为什么老师的浏览器可以看到完美的网页,而我下载的json全是乱码?

2. 我的操作过程有任何问题或者多余,都请老师们指出,我全都欣然接受,太想学习,太想知道了!

本文标签: 大佬 乱码 网页