TypeError: POST data should be bytes, an iterable of bytes, or a file object. It cannot be of type s

在python3版本中,对于以上错误新发现,具体如下:

产生异常代码:

from urllib import request,parse

url = "http://movie.douban.com/typerank?type_name=%E5%89%A7%E6%83%85&type=11&interval_id=100:90&action=&start=0&limit=20"
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"}
formdata = {
   'start': '0',
   'limit': '20'
}
data = parse.urlencode(formdata)
req = request.Request(url=url,data=data,headers=headers)
response = request.urlopen(req)
print(response.read())
运行出现:TypeError: POST data should be bytes, an iterable of bytes, or a file object. It cannot be of type s
**网上的大部分的解决方案为:data = parse.urlencode.(formdata).encode("utf-8")
以上解决方案能够处理上述问题,但是得出的一堆看不懂的代码,往往达不到要求。因为这里还容易忽略一个decode("utf-8")
正确代码如下:
  1 from urllib import request
  2 from urllib import parse
  3 
  4 url = "https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action="
  5 headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"}
  6 formdata = {
  7     'start': '0',
  8     'limit': '10'
  9 }
 10 
 11 data = parse.urlencode(formdata).encode(encoding="utf-8")
 12 req = request.Request(url=url,headers=headers)
 13 response = request.urlopen(req)
 14 print(response.read().decode("utf-8"))
在加上了encode(encoding="utf-8")的同时,在输出时,再使用decode("utf-8")进行解码,往往更加能够取的理想的效果。以上为个人遇见的一个问题,分享给大家。
 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值