zoukankan      html  css  js  c++  java
  • 解决图片乱码的问题

    关于图片名称的中央乱码问题

    import requests
    from lxml import etree
    url = 'http://pic.netbian.com/4kmeinv/index_%d.html'
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36'
    }
    for page in range(10): #页码数,先爬这几页吧,多了怕你身体抗不住
        new_url = format(url%page)
        if page == 1:
            new_url = 'http://pic.netbian.com/4kmeinv/'
        page_text = requests.get(url=new_url,headers=headers).text
        tree = etree.HTML(page_text)
        li_list = tree.xpath('//*[@id="main"]/div[3]/ul/li')
    
        for li in li_list:
            img_title = li.xpath('./a/img/@alt')[0].encode('iso-8859-1').decode('gbk') #在这会出现图片标题乱码问题,用iso-8859-1字符集处理
            img_url = li.xpath('./a/img/@src')
            for detail_img_url in img_url:
                img_detail_text = requests.get(url='http://pic.netbian.com'+detail_img_url,headers=headers).content
                img_name = detail_img_url.split('/')[-1]
                file = img_name
                with open(file,'wb') as f:
                    f.write(img_detail_text)
    

    img
    爬取成功,已经保存到本地了!!!!!

    ISO-8859-1官方解释

        ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF之间是文字符号。
    
        此字符集支持部分于欧洲使用的语言,包括阿尔巴尼亚语、巴斯克语、布列塔尼语、加泰罗尼亚语、丹麦语、荷兰语、法罗语、弗里西语、加利西亚语、德语、格陵兰语、冰岛语、爱尔兰盖尔语、意大利语、拉丁语、卢森堡语、挪威语、葡萄牙语、里托罗曼斯语、苏格兰盖尔语、西班牙语及瑞典语。
        
        英语虽然没有重音字母,但仍会标明为ISO/IEC 8859-1编码。除此之外,欧洲以外的部分语言,如南非荷兰语、斯瓦希里语、印尼语及马来语、菲律宾他加洛语等也可使用ISO/IEC 8859-1编码。
        
        法语及芬兰语本来也使用ISO/IEC 8859-1来表示。但因它没有法语使用的 œ、Œ、Ÿ 三个字母及芬兰语使用的 Š、š、Ž、ž ,故于1998年被ISO/IEC 8859-15所取代。(ISO 8859-15同时加入了欧元符号
        
        ISO-8859-1收录的字符除ASCII收录的字符外,还包括西欧语言、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号。欧元符号出现的比较晚,没有被收录在ISO-8859-1当中。
        
        因为ISO-8859-1编码范围使用了单字节内的所有空间,在支持ISO-8859-1的系统中传输和存储其他任何编码的字节流都不会被抛弃。换言之,把其他任何编码的字节流当作ISO-8859-1编码看待都没有问题。这是个很重要的特性,MySQL数据库默认编码是Latin1就是利用了这个特性。
        ASCII编码是一个7位的容器,ISO-8859-1编码是一个8位的容器。
            HTML 4.01 支持 ISO 8859-1 (Latin-1) 字符集。 [1] 
            ISO-8859-1 的较低部分(从 1 到 127 之间的代码)是最初的 7 比特 ASCII。
            ISO-8859-1 的较高部分(从 160 到 255 之间的代码)全都有实体名称。
        这些符号中的大多数都可以在不进行实体引用的情况下使用,但是实体名称或实体编号为那些不容易通过键盘键入的符号提供了表达的方法。
    注释:实体名称对大小写敏感。
    
  • 相关阅读:
    使用CustomValidate自定义验证控件
    C#中金额的大小写转换
    Andriod出错之Unable to build: the file dx.jar was not loaded from the SDK folder!
    VC 编写的打字练习
    机房工作笔记Ping只有单向通
    web服务协同学习笔记(1)
    Dll 学习3 将MDI子窗口封装在DLL中
    机房工作学习文件共享
    Andriod出错之Failed to find an AVD compatible with target 'Android 2.2'
    Andriod出错之wrapper was not properly loaded first
  • 原文地址:https://www.cnblogs.com/saoqiang/p/12403743.html
Copyright © 2011-2022 走看看