鱼C论坛

 找回密码
 立即注册
查看: 1037|回复: 6

[已解决]爬虫爬1688上面的图片。为啥会出现UnicodeDecodeError: 'utf-8' codec can't decod...

[复制链接]
发表于 2018-8-18 16:23:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
运行之后就出现这个错误了...UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbb in position 1057: invalid start byte

这个是完整的错误信息:
Traceback (most recent call last):
  File "F:/前主人的工作/test/blackwater.py", line 48, in <module>
    saveimg()
  File "F:/前主人的工作/test/blackwater.py", line 38, in saveimg
    imgurl_list = geturl(url)
  File "F:/前主人的工作/test/blackwater.py", line 13, in geturl
    html = open_url(url).decode('utf-8')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbb in position 1057: invalid start byte




这个是源代码,我用这个爬百度贴吧是成功了的。。改了一下爬1688的就出现上面这个错误了~求指教~感谢!!~

import urllib.request
import os

def open_url(url) :
    req = urllib.request.Request(url)
    req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.104 Safari/537.36')
    response = urllib.request.urlopen(url)
    html = response.read()

    return html

def geturl(url) :
    html = open_url(url).decode('utf-8')
    imgurl_list = []
    a = html.find('<img src="')
    while a != -1 :
        b = html.find('.jpg', a, a+255)
        if b != -1 :
            imgurl_list.append(html[a+10: b+4])
        else :
            b = a + 10

        a = html.find('<img src="', b)

    return imgurl_list
'''
    for i in imgurl_list :
        print(i)
'''
def saveimg(file = 'WK') :
    os.mkdir(file)
    os.chdir(file)

    url = 'https://item.taobao.com/item.htm?spm=a230r.1.14.18.58a078ebX7sZ7F&id=574781588980&ns=1&abbucket=16#detail'
    #geturl(url)
   

    imgurl_list = geturl(url)

    img_len = len(imgurl_list)
    for each in range(img_len) :
        filename = imgurl_list[each].split('/')[-1]
        with open(filename, 'wb') as f :
            html = open_url(imgurl_list[each])
            f.write(html)

if __name__ == '__main__' :
    saveimg()
最佳答案
2018-8-18 19:38:14
淘宝的编码是gbk的,是下楼上的办法。不行的话就是DOS窗口的问题。
改成这样:
  1. html = open_url(url).decode('gb18030')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-18 16:42:16 | 显示全部楼层
你踩过点没有?注意观察<meta charset="xxx">
  1. html = open_url(url).decode('utf-8')
复制代码
里面的utf-8改成gbk试试。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-18 19:38:14 | 显示全部楼层    本楼为最佳答案   
淘宝的编码是gbk的,是下楼上的办法。不行的话就是DOS窗口的问题。
改成这样:
  1. html = open_url(url).decode('gb18030')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-18 19:56:24 | 显示全部楼层
也许存在个别其他编码字符  html = open_url(url).decode('utf-8',"ignore")你瞅瞅行不
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-19 20:52:04 | 显示全部楼层
我有注意看的<meta charset="utf-8">上面的是这样的,没错。然后我也有尝试过gbk等其他的,也是不行诶
到现在还没有解决额
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-19 22:31:44 | 显示全部楼层
流言 发表于 2018-8-18 19:38
淘宝的编码是gbk的,是下楼上的办法。不行的话就是DOS窗口的问题。
改成这样:

真可以了。为啥我查的时候都是'utf-8' 和 'gbk'的,为啥是用gb18030...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-28 14:24:01 | 显示全部楼层
13570609660 发表于 2018-8-19 22:31
真可以了。为啥我查的时候都是'utf-8' 和 'gbk'的,为啥是用gb18030...


不是程序编码的问题,是Windows dos窗口的问题。dos窗口默认是18030的,输出其他编码可能会出错
你写的这个程序在linux 下是没问题的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 08:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表