Python 3.6使用nytimesarticle包爬取时报错:TypeError: must be str, not bytes
解决Python3.6下nytimesarticle包搜索时的TypeError: must be str, not bytes问题
我之前也踩过这个坑!nytimesarticle是个比较老的第三方包,当初是针对Python2写的,没完全适配Python3的字符串类型差异,所以才会触发这个错误。下面是具体的解决步骤:
问题根源
Python3中,urllib.request.urlopen()返回的响应是bytes类型,而这个包的原有代码直接把bytes传给了json.load()——这个方法在Python3里只接受字符串或文件对象,不接受bytes,因此抛出类型错误。
找到包的核心文件:
打开Python3.6的site-packages目录(比如Windows下是C:\Python36\Lib\site-packages,Linux/macOS下是/usr/local/lib/python3.6/site-packages),找到nytimesarticle文件夹,打开里面的api.py文件。修改响应处理代码:
找到文件中类似下面的代码块(通常在_request方法里):response = urlopen(request) data = json.load(response)把它替换成:
response = urlopen(request) # 将bytes响应解码为utf-8字符串 response_content = response.read().decode('utf-8') data = json.loads(response_content)保存文件并重新运行代码:
修改完成后,保存api.py,然后重新执行你的搜索代码,比如:from nytimesarticle import articleAPI # 替换成你的NYT API密钥 api = articleAPI('your_api_key_here') # 执行搜索 results = api.search(q='technology') print(results)
这样就能解决bytes和str不兼容的问题了!
内容的提问来源于stack exchange,提问作者feroze waris
相关产品推荐
相关产品推荐

