我使用python 3.5.2和scrapy 1.1.1。
运行以下代码时出错:
#-*- coding:utf-8-*-
import random
import base64
class ProxyMiddleware(object):
def process_request(self, request, spider):
proxy = random.choice(PROXIES)
if proxy['user_pass'] is not None:
request.meta['proxy'] = "http://%s" % proxy['ip_port']
encoded_user_pass = base64.encodebytes(proxy['user_pass'])
request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass
print("ok!" + proxy['ip_port'])
else:
print("fail!" + proxy['ip_port'])
request.meta['proxy'] = "http://%s" % proxy['ip_port']错误:
File "C:\Users\dell\AppData\Local\Programs\Python\Python35\lib\base64.py", line 518, in _input_type_check
m = memoryview(s)
TypeError: memoryview: a bytes-like object is required, not 'str'我认为这个错误与这句话有关:
encoded_user_pass = base64.encodebytes(proxy['user_pass'])但我不知道怎么解决。
帮帮忙吧,
提前谢谢!
编辑:
encoded_user_pass = base64.encodebytes(proxy['user_pass'])被更改为
encoded_user_pass = base64.encodebytes(proxy['user_pass'].encode())还有另一个错误:
request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass
TypeError: Can't convert 'bytes' object to str implicitly我该怎么办?
发布于 2016-07-24 15:42:32
函数base64.encodebytes()需要字节值,您似乎要为它提供一个字符串。
要解决这个问题,只需对字符串值进行编码( encode ()函数将字符串对象转换为字节对象):
base64.encodebytes('foo'.encode())或者在你的情况下:
encoded_user_pass = base64.encodebytes(proxy['user_pass'].encode())发布于 2016-07-24 15:41:47
顾名思义,base64.encodebytes编码的是字节,而不是字符串。正如文档中所概述的,它需要一个类似字节的对象 (就像错误消息告诉您的一样)。
但是,您的proxy['user_pass']值是一个字符串。为了将其转换为字节,调用str.encode
encoded_user_pass = base64.encodebytes(proxy['user_pass'].encode())https://stackoverflow.com/questions/38553705
复制相似问题