首页 > 其他分享 >使用json.dump(citys_data, f, ensure_ascii=False)写文件的时候,如果要写入汉字,则要指定ensure_ascii为False

使用json.dump(citys_data, f, ensure_ascii=False)写文件的时候,如果要写入汉字,则要指定ensure_ascii为False

时间:2023-09-12 10:55:35浏览次数:37  
标签:province city False com ensure https citys ascii lianjia


这个代码例子为获取链家网里所有的城市,然后将按照{省名:{市名:url},{市名:url}....}的方式

import requests
from lxml import etree
import json


def get_all_city():
    url = "https://www.lianjia.com/city/"  # 全国城市列表
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36'
    }
    try:
        response = requests.get(url=url, headers=headers)
    except requests.exceptions.ConnectionError as e: # 有时网不好,连接错误
        print(e)  # HTTPSConnectionPool(host='www.lianjia.com', port=443): Max retries exceeded with url: /city/ (Caused by ConnectTimeoutError(<urllib3.connection.HTTPSConnection object at 0x000001F0143B7810>, 'Connection to www.lianjia.com timed out. (connect timeout=None)'))
        return  # None

    tree = etree.HTML(response.text)

    citys = {}
    province_list = tree.xpath("//div[@class='city_province']")
    for province in province_list:
        province_name = province.xpath(".//div[@class='city_list_tit c_b']/text()")[0]  # 省名, 例:山东
        province_city_name = province.xpath(".//ul/li/a/text()")  # 市名, 例:['菏泽', '济南', '济宁', '临沂', '青岛', '泰安', '潍坊', '威海', '烟台', '淄博']
        province_city_url = province.xpath(".//ul/li/a/@href")  # 对应的url,例:['https://heze.lianjia.com/', 'https://jn.lianjia.com/', 'https://jining.lianjia.com/', 'https://linyi.lianjia.com/', 'https://qd.lianjia.com/', 'https://ta.lianjia.com/', 'https://wf.lianjia.com/', 'https://weihai.lianjia.com/', 'https://yt.lianjia.com/', 'https://zb.lianjia.com/']

        citys[province_name] = dict(zip(province_city_name, province_city_url))  # 将市名和对应的url组成键值对
    return citys


if __name__ == '__main__':
    citys_data = get_all_city()
    with open("citys_data.json", "w", encoding='utf-8') as f:
        json.dump(citys_data, f, ensure_ascii=False)

 

json.dump(citys_data, f),默认ensure_ascii为True
json.dump(citys_data, f, ensure_ascii=False),指定ensure_ascii为False,写入中文
{
"\u5b89\u5fbd": {
"\u5b89\u5e86": "https://aq.lianjia.com/",
"\u6ec1\u5dde": "https://cz.fang.lianjia.com/",
"\u961c\u9633": "https://fy.lianjia.com/",
"\u5408\u80a5": "https://hf.lianjia.com/",
"\u9a6c\u978d\u5c71": "https://mas.lianjia.com/",
"\u829c\u6e56": "https://wuhu.lianjia.com/"
},
"\u5317\u4eac": {
"\u5317\u4eac": "https://bj.lianjia.com/"
},
"\u91cd\u5e86": {
"\u91cd\u5e86": "https://cq.lianjia.com/"
}, 。。。。。。。 }
{
"安徽": {
"安庆": "https://aq.lianjia.com/",
"滁州": "https://cz.fang.lianjia.com/",
"阜阳": "https://fy.lianjia.com/",
"合肥": "https://hf.lianjia.com/",
"马鞍山": "https://mas.lianjia.com/",
"芜湖": "https://wuhu.lianjia.com/"
},
"北京": {
"北京": "https://bj.lianjia.com/"
},
"重庆": {
"重庆": "https://cq.lianjia.com/"
}, 。。。。。。。 }

 

标签:province,city,False,com,ensure,https,citys,ascii,lianjia
From: https://www.cnblogs.com/lifengjuan/p/17695594.html

相关文章

  • 不同小图标的编码网页中的大于号,小于号,应该用编码来代替,HTML中特殊字符和与之对应的A
    上面两个符号的HTML代码,>< >< 应用场景:当使用键盘无法打出来的时候。因为我测试在html代码中使用&amp;和&是等价的。带有实体名称的ASCII实体 常用的几个结果描述实体名称实体编号"quotationmark"&#34;'apostrophe&apos;&#39;&amper......
  • WPF在EnsureHandle之前设置WindowStyle提升性能
    本文将记录一个在WPF应用程序启动过程中的性能优化点。如果一个窗口需要设置WindowStyle属性,那么在窗口EnsureHandle之前,设置WindowStyle属性将会比在EnsureHandle之后设置快不少在dotTrace里的一次测量在窗口EnsureHandle之后设置WindowStyle属性的时间大概是2......
  • Python进制转换以及ASCII码的转换
    获取ASCII码以及根据ASCII码获取内容#获取字符的编码为98#c的ASCII码为99print(ord('c'))#chr()根据编获取对应的值print(chr(99))进制的转换#hex函数十进制转十六进制print(f'99的十六进制{hex(99)}')#oct函数十进制转八进制print(f'99的八进制{oct(99)}')#......
  • --createApplication=false
    创建angular工程时的--createApplication=false改为了--create-application=false更新前https://zhuanlan.zhihu.com/p/54075580更新后https://angular.cn/cli/new......
  • Python中会被视为False的值有以下几种
    Python中会被视为False的值有以下几种:布尔值:False数值:0或0.0字符串:空字符串,如’'或""容器:空的容器,如[],(),{},set()None:None其他的值都会被视为True。您可以用bool()函数来测试一个值是否为True或False。例如:bool(0)#Falsebool(1)#Truebool('')#Falsebool('Hello'......
  • strict=False 但还是size mismatch 的解决办法
    问题描述:#RuntimeError:Error(s)inloadingstate_dictforFusion_Generator:sizemismatchforfg_decoder.0.weight:copyingaparamwithshapetorch.Size([4096,1024]),g_decoder.0.weight:copyingaparamwithshapetorch.Size([4096,1024]...出现两个参数的不......
  • Winform项目中出现 "已经可见的窗体不能显示为模式对话框。在调用 showDialog 之前应
    1问题描述最近做一个winform项目,启动程序弹出的加载进度窗体时,发生如标题所示的异常。2尝试debug根据异常提示,在进度窗体弹出前添加代码Visable=false;--未解决逐步debug调试发现Form弹框运行了2次,由此查出bug所在。由于我是用的单例模式,在Program.cs中运行的还是new......
  • ASCII码-shellcode的技巧
    网上已经有成熟的工具了,所以就简单记录一下工具怎么用吧https://github.com/TaQini/alpha3https://github.com/veritas501/ae64.githttps://github.com/rcx/shellcode_encoder结合题目来看吧,没有开启NX保护,基本这类型题目九成九都是shellcode题程序一开始会让我们在bss段上......
  • python+playwright 学习-72 设置window.navigator.webdriver属性为false 跳过网站反爬
    前言有些网站有反爬机制,比如用代码启动的浏览器会被检测到,需要人机验证,用脚本去点击或者滑动滑动虽然能滑动,但是会认证失败。用playwright和selenium启动的浏览器都会用个webdriver属性。浏览器会根据这个属性判断是否是人工正常操作。window.navigator.webdriver属性人......
  • 十六进制 ascii码 字符串
    十六进制ascii码字符串defis_hex(string):hex_chars=set('0123456789abcdefABCDEF')returnall(cinhex_charsforcinstring)defis_ascii(string):returnall(ord(c)<128forcinstring)importbinasciistr_bytes=b'3010864E725......