• 楚耳
    2018-07-07
    老师 我看你代码里面编码问题的时候,有时候用 decode("utf-8")这个方法,有时又是直接传个encoding="utf-8"这个参数,你们详细讲讲这两个方法吗,有点不知道什么时候该用哪种方法?

    作者回复: 我想你指的decode和encoding应该是这两个Python语句:
    response = request.urlopen('http://httpbin.org/post', data=data)
    print(response.read().decode('utf-8'))

    data = bytes(parse.urlencode(dict), encoding='utf8')

    这里从字面来看,decode()是函数,encoding是bytes()函数的参数,他们不能放在一起对比,就像雷锋和雷锋塔一样
    那从功能上来看,设计encode()、decode()、bytes()、str()这些函数是做什么用的呢?
    在Python3中严格区分了字符串和字节的概念,在网络的底层传输的文字就是字节形式,而上层是字符串形式,我们”看得懂“的是字符串,但是很多底层函数需要用到字节形式;
    就必然产生了字符串和字节之间相互转换的需求,那么上面提到的几个函数就是用来做字符串和字节之间转换的。
    如我们需要字符串转换成字节,可以使用bytes()或encode()进行转换:
    s='你好'
    b1=s.encode('utf-8') # 使用utf8编码将字符串转换为字节
    b2=bytes(s, encoding='utf-8') #和上面功能一样

    那如果将字节转换回字符串呢?
    b1.decode('utf-8')
    str(b2, encoding='utf-8')

    这就是这几个函数之间的区别了

    
     3
  • 龙疯疯
    2020-02-05
    在pycharm里使用response.没有read的提示呢,写完read()后再.也没有decode的提示,是这种函数是不提示的吗

    作者回复: pycharm会根据类型推断进行提示,类似 dir(类型),看支持什么方法,后面就提示哪些可使用的方法

    
    
  • 悟空
    2019-12-27
    今日收获,老师关于编码的解释,相当通俗易懂,很解渴,有种对编码感性的认识; “read 直接读是按单个字节解释出来的,又因为中文编码往往一个中文占用多个byte,所以出现乱码,解决方式就是,read的时候,指定使用原有的编码方式做解析,比如:通用的编码方式 utf-8,现在一般的网页都是采用utf这种万国码”
    
    
  • Mangena_
    2019-12-27
    辛苦尹老师帮忙看下呗,我运行完代码,最后一行报错如下:urllib.error.URLError: <urlopen error timed out> 请问这个是什么原因,应该怎么解决哇?~

    作者回复: 连接超时。要么是网速太慢,要么是dns解析的时间过长,要么是网站响应过慢,都会导致 urlopen超时,需要增加timeout时间,

     1
    
  • Ranchro
    2019-10-03
    代码如下,老师请问下是什么原因报错呢?
    from urllib import request
    url = 'http://www.baidu.com'
    response = request.urlopen(url,timeout=1)
    print(response.read().decode('utf-8'))

    运行后的错误提示如下:
    Traceback (most recent call last):
      File "C:/Users/Administrator.USER-20190120DJ/PycharmProjects/untitled/63urllib.py", line 8, in <module>
        response = request.urlopen(url,timeout=1)
    NameError: name 'request' is not defined

    Process finished with exit code 1
    展开

    作者回复: 没有复现你的问题,是python3的那个具体版本?
    'request' is not defined 是urllib目录里没有request这个方法

    
    
  • Neo
    2019-05-11
    尹老师,在pycharm的右下角已经显示了“utf-8”的设置,请问这个设置的作用是?和代码中的“.decode'utf-8'”有什么区别?

    作者回复: 右下角是提示,是pycharm软件根据文件内容自动检测到的, .decode 是程序按照utf-8 编码做的解码工作

    
    
  • rice5
    2019-05-05
    老师,我这里输入的response. 后面的read() 以及decode()都不会有提示代码提示,自动补齐呢?
    
    
  • JingZ
    2019-01-04
    刚在数据实战的爬虫图片第10讲,看完第1模块,跳着来看爬虫,很有收货,对urllib即刻上手操作啦~
    
    
  • 八点二十
    2019-01-01
    from urllib import request

    url = 'http://www.baidu.com'
    response = request.urlopen(url,timeout=5)
    print(response.read().decode('utf-8'))
    老师以上是我的代码运行时下面报错了是什么原因

    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 222, in urlopen
        return opener.open(url, data, timeout)
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 525, in open
        response = self._open(req, data)
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 543, in _open
        '_open', req)
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 503, in _call_chain
        result = func(*args)
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 1345, in http_open
        return self.do_open(http.client.HTTPConnection, req)
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 1320, in do_open
        r = h.getresponse()
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py", line 1321, in getresponse
        response.begin()
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py", line 296, in begin
        version, status, reason = self._read_status()
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py", line 257, in _read_status
        line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/socket.py", line 589, in readinto
        return self._sock.recv_into(b)
    socket.timeout: timed out
    展开

    作者回复: 出现大段错误时候不要慌,先从最下面的错误提示看。
    这里的socket是建立网络连接的功能,那么time out 是表示连接超时,也就是你到达对方的网络不通。

    
    
我们在线,来聊聊吧