python - 通过 python 获取谷歌图像。JSON 对象必须是 str 问题
问题描述
我正在尝试通过 python 获取一些谷歌图像,但是当我尝试从服务器读取 json 响应时,我收到一个错误,告诉我对象必须是 str 而不是字节。
事实上,我试图通过解码(utf-8)将服务器的响应转换为str来解决这个问题。我收到另一个错误,告诉我“期望值:第 1 行第 1 列(字符 0)”
这是我所做
的 1。我在 google 上搜索 BLACK SHIRTS 并单击了图像规则。我复制了网址。
2. 我创建标头,通知用户代理是 chrome(为了在向服务器发送请求时不会被阻止)
3. 我创建一个请求
4. 我阅读了请求
5.当我尝试加载它时,我遇到了上面提到的问题。所以我试图解码第 4 步的输出(通过添加这个 .decode('utf-8')。
这是我使用的代码
import os
import urllib.request as ulib
import urllib.parse
import json
headers = {'User-Agent': 'Chrome/41.0.2228.0 Safari/537.36'}
url = 'https://www.google.com/search?q=BLACK+SHIRTS&source=lnms&tbm=isch&sa=X&ved=0ahUKEwiS2NPpxPbbAhWlMewKHSpiC9IQ_AUICygC&biw=1600&bih=794' ## this is the url when i searched
request = ulib.Request(url, None, headers)
json_string = ulib.urlopen(request).read()
json_string=json_string.decode('utf-8')
page = json.loads(json_string)
PS:从第 4 步中删除.decode('utf-8')(与最后一行匹配)
解决方案
您需要使用 Beautiful Soup https://www.crummy.com/software/BeautifulSoup/之类的包解析 HTML 响应吗?
推荐阅读
- flutter - 如何在 Flutter 中将 DropdownButton 与 TextField 对齐?
- python - 如何将所有 100,000 列的循环时间数据 (HH:MM:SS) 转换为秒?
- c++ - callgrind 没有可用于仅几个函数的源
- laravel - Laravel 作业未尝试
- python - Python 在 Windows CMD 中运行带参数的命令
- python - Tensorflow GradientTape“变量不存在渐变”间歇性
- apache-spark - spark中创建的分区本质上是可变的还是不可变的?
- c - 检查C中的多指针重定向验证
- centos - 重启状态为down的节点
- c - C中带有while循环的阶乘