解决图片乱码的问题

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

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 之间的代码)全都有实体名称。
    这些符号中的大多数都可以在不进行实体引用的情况下使用,但是实体名称或实体编号为那些不容易通过键盘键入的符号提供了表达的方法。
注释:实体名称对大小写敏感。
posted @ 2020-03-03 18:04  一起奥利给  阅读(3319)  评论(0编辑  收藏  举报